剩下这最后一个语法错误无法解决,大家帮忙想一下,这里截取跟错误有关的内容。
Player.h中头文件的包含。
single是一个嵌套在CPlayer中的一个类,(当然好像起名CSingle更好些)因为CPlayer中有很多函数要用这个类。。。。
#include "Poker.h"
#include "PokerUIList.h"
//#include "Referee.h" 想在类中创建Referee的指针对象,不用这样包含。这样包含,导致Referee类在CPlayer类前编译,从而使CPlayer对象在CReferee中不被识别
#include <vector>
using namespace std;
CPlayer类中Single的定义private:
class Single
{
public:
CPokerUIList sList;//
int score;//本个体的得分
Single()
{
//个体初始化
score=0;
}
Single(Single &A)
{
score=A.score;
A.sList.CreateNewList(1,A.sList.GetCount(),sList);
}
};//一个个体
编译提示,错误是这样的。(当然,Single是被装入了vector中来使用的)
错误定位在vector文件中。
#if _HAS_ITERATOR_DEBUGGING错误提示如下。
if (_Where._Mycont != this
|| _Where._Myptr < _Myfirst || _Mylast < _Where._Myptr)
_DEBUG_ERROR("vector insert iterator outside range");
#endif /* _HAS_ITERATOR_DEBUGGING */
_Ty _Tmp = _Val; // in case _Val is in sequence //就是这一行错误
size_type _Capacity = capacity();
1>c:\program files\microsoft visual studio 8\vc\include\vector(1125) : error C2558: class 'CPlayer::Single' : no copy constructor available or copy constructor is declared 'explicit'
1> c:\program files\microsoft visual studio 8\vc\include\vector(1117) : while compiling class template member function 'void std::vector<_Ty>::_Insert_n(std::_Vector_iterator<_Ty,_Alloc>,__w64 unsigned int,const _Ty &)'
1> with
1> [
1> _Ty=CPlayer::Single,
1> _Alloc=std::allocator<CPlayer::Single>
1> ]
1> d:\源程序\shuangsheng\shuangsheng\player.cpp(545) : see reference to class template instantiation 'std::vector<_Ty>' being compiled
1> with
1> [
1> _Ty=CPlayer::Single
1> ]
本人能力有限,已是黔驴技穷,恭听大师教诲!
22 个解决方案
#1
请试验以下代码,再将惟一一处的const删去,看看编译提示是什么。
class A
{
public:
A(){}
A( const A& ){}
};
int main()
{
vector< A > vec;
A a;
vec.push_back( a );
return 0;
}
复制构造函数的参数是
const的。
#2
vector在哪声明的?贴出来看看啊。
看看这两种可能
1. Single改为public的试试。
2. vector定义成这样:vector<CPlayer::Single>
看看这两种可能
1. Single改为public的试试。
2. vector定义成这样:vector<CPlayer::Single>
#3
‘no copy constructor available or copy constructor is declared 'explicit'’
Single(Single &A) ??
Single(Single &A) ??
#4
贴一下vector吧
#5
应该是类需要一个拷贝构造函数
类似CString(_In_ const CString& strSrc);
类似CString(_In_ const CString& strSrc);
#6
楼上的大侠,vector是库文件吧!也需要贴吗?
#7
缺少拷贝构造函数要么使用类的指针
#8
你可能需要这样定义拷贝构造函数:
Single(const Single &A)
这样一来,可能会带来其它问题,比如A.sList.GetCount()这句可能又要出错,此时又要修改sList.GetCount()的签名为(如果你不是这样签名的话):
(你原来的返回类型) GetCount() const
这可能带来一系列连锁反应。但只是时间问题,没什么难度。
Single(const Single &A)
这样一来,可能会带来其它问题,比如A.sList.GetCount()这句可能又要出错,此时又要修改sList.GetCount()的签名为(如果你不是这样签名的话):
(你原来的返回类型) GetCount() const
这可能带来一系列连锁反应。但只是时间问题,没什么难度。
#9
是你声明vector的地方
#10
你上面贴的那个看不出来,代码信息不够~
#11
Single(Single &A)
{
score=A.score;
A.sList.CreateNewList(1,A.sList.GetCount(),sList);
}
猜想应改为
Single(const Single &A)
{
score=A.score;
A.sList.CreateNewList(1,A.sList.GetCount(),sList);
}
#12
信息不够,你Vector又存指针了?然后指的那玩样生命周期太短?
猜测。
猜测。
#13
===========================================================
wo 实验过你的例子了,const存在与否均可以顺利编译通过,我是vs2005环境
#14
#15
======================================================================
8楼老兄说的是,加上const,就引进了更多的错误。程序总体接近1w行代码,因为刚开始类设计的不科学,const用的有点乱。光一个const就把人弄的焦头烂额。
最简单的办法就是去掉所有的const,这样程序便可以减少很多出错的机会。现在就剩下这最后一个错误了。错误如果指向别的地方还好说,结果指向vector库文件,这真是麻烦呀!
#16
#17
我用VC6和VC2008都试过了,去掉const不能编译通过。没有2005
我还专门用gcc试了一下,去掉const不能编译通过。
必须要加上啊。
#18
楼上的,我也查了钱能的c++书籍,他在书中介绍拷贝构造函数的时候,所有的例子,都未加const。
从理论上来说,加了const应该只是说这个引用不能改变,并没有别的意思吧~
从理论上来说,加了const应该只是说这个引用不能改变,并没有别的意思吧~
#19
从你提供的信息看,估计是Single插入vector时,复制构造函数由于Single类是私有类而导致无法访问。可以尝试将private改成public
#20
Single(Single const &A)
#21
这样修改问题依旧
实验了8楼仁兄的办法,这个错误消失了,不过又引入了几个其他的错误,正在按照8楼的方法整改中
#22
灰常灰常高兴,问题已经解决,先进行以下总结:
首先问题是按照8楼提供的思路解决的。。。。。。
这里拷贝构造函数还是要用const,这点还没搞明白,因为拷贝构造函数不一定非要用const参数吧!!!
因为代码多,类与类之间有千丝万缕的联系(这归功于类的设计有缺陷),这点还得再研究下。
不过这次让我领教了不规范用const的后果,一个const类对象,只能调用const函数,而我的代码中好多属于对象为const,而调用的好多函数却不是const,因为涉及的函数多,最终修改起来很费劲。。。
再次感谢大家
首先问题是按照8楼提供的思路解决的。。。。。。
这里拷贝构造函数还是要用const,这点还没搞明白,因为拷贝构造函数不一定非要用const参数吧!!!
因为代码多,类与类之间有千丝万缕的联系(这归功于类的设计有缺陷),这点还得再研究下。
不过这次让我领教了不规范用const的后果,一个const类对象,只能调用const函数,而我的代码中好多属于对象为const,而调用的好多函数却不是const,因为涉及的函数多,最终修改起来很费劲。。。
再次感谢大家
#1
请试验以下代码,再将惟一一处的const删去,看看编译提示是什么。
class A
{
public:
A(){}
A( const A& ){}
};
int main()
{
vector< A > vec;
A a;
vec.push_back( a );
return 0;
}
复制构造函数的参数是
const的。
#2
vector在哪声明的?贴出来看看啊。
看看这两种可能
1. Single改为public的试试。
2. vector定义成这样:vector<CPlayer::Single>
看看这两种可能
1. Single改为public的试试。
2. vector定义成这样:vector<CPlayer::Single>
#3
‘no copy constructor available or copy constructor is declared 'explicit'’
Single(Single &A) ??
Single(Single &A) ??
#4
贴一下vector吧
#5
应该是类需要一个拷贝构造函数
类似CString(_In_ const CString& strSrc);
类似CString(_In_ const CString& strSrc);
#6
楼上的大侠,vector是库文件吧!也需要贴吗?
#7
缺少拷贝构造函数要么使用类的指针
#8
你可能需要这样定义拷贝构造函数:
Single(const Single &A)
这样一来,可能会带来其它问题,比如A.sList.GetCount()这句可能又要出错,此时又要修改sList.GetCount()的签名为(如果你不是这样签名的话):
(你原来的返回类型) GetCount() const
这可能带来一系列连锁反应。但只是时间问题,没什么难度。
Single(const Single &A)
这样一来,可能会带来其它问题,比如A.sList.GetCount()这句可能又要出错,此时又要修改sList.GetCount()的签名为(如果你不是这样签名的话):
(你原来的返回类型) GetCount() const
这可能带来一系列连锁反应。但只是时间问题,没什么难度。
#9
是你声明vector的地方
#10
你上面贴的那个看不出来,代码信息不够~
#11
Single(Single &A)
{
score=A.score;
A.sList.CreateNewList(1,A.sList.GetCount(),sList);
}
猜想应改为
Single(const Single &A)
{
score=A.score;
A.sList.CreateNewList(1,A.sList.GetCount(),sList);
}
#12
信息不够,你Vector又存指针了?然后指的那玩样生命周期太短?
猜测。
猜测。
#13
===========================================================
wo 实验过你的例子了,const存在与否均可以顺利编译通过,我是vs2005环境
#14
#15
======================================================================
8楼老兄说的是,加上const,就引进了更多的错误。程序总体接近1w行代码,因为刚开始类设计的不科学,const用的有点乱。光一个const就把人弄的焦头烂额。
最简单的办法就是去掉所有的const,这样程序便可以减少很多出错的机会。现在就剩下这最后一个错误了。错误如果指向别的地方还好说,结果指向vector库文件,这真是麻烦呀!
#16
#17
我用VC6和VC2008都试过了,去掉const不能编译通过。没有2005
我还专门用gcc试了一下,去掉const不能编译通过。
必须要加上啊。
#18
楼上的,我也查了钱能的c++书籍,他在书中介绍拷贝构造函数的时候,所有的例子,都未加const。
从理论上来说,加了const应该只是说这个引用不能改变,并没有别的意思吧~
从理论上来说,加了const应该只是说这个引用不能改变,并没有别的意思吧~
#19
从你提供的信息看,估计是Single插入vector时,复制构造函数由于Single类是私有类而导致无法访问。可以尝试将private改成public
#20
Single(Single const &A)
#21
这样修改问题依旧
实验了8楼仁兄的办法,这个错误消失了,不过又引入了几个其他的错误,正在按照8楼的方法整改中
#22
灰常灰常高兴,问题已经解决,先进行以下总结:
首先问题是按照8楼提供的思路解决的。。。。。。
这里拷贝构造函数还是要用const,这点还没搞明白,因为拷贝构造函数不一定非要用const参数吧!!!
因为代码多,类与类之间有千丝万缕的联系(这归功于类的设计有缺陷),这点还得再研究下。
不过这次让我领教了不规范用const的后果,一个const类对象,只能调用const函数,而我的代码中好多属于对象为const,而调用的好多函数却不是const,因为涉及的函数多,最终修改起来很费劲。。。
再次感谢大家
首先问题是按照8楼提供的思路解决的。。。。。。
这里拷贝构造函数还是要用const,这点还没搞明白,因为拷贝构造函数不一定非要用const参数吧!!!
因为代码多,类与类之间有千丝万缕的联系(这归功于类的设计有缺陷),这点还得再研究下。
不过这次让我领教了不规范用const的后果,一个const类对象,只能调用const函数,而我的代码中好多属于对象为const,而调用的好多函数却不是const,因为涉及的函数多,最终修改起来很费劲。。。
再次感谢大家