C++基础搞忘了,求指点

dinglbo 2009-08-16 04:45:15
我有定义了一个类A:
class A
{
public:
A(CTime time, CString s1,CString s2);
virtual ~A();

};
类B:
class B : public A
{
public:
B(CTime time, CString s1,CString s2);
virtual ~B();

};

B的构造函数是这样写的:
B::B(CTime time, CString s1,CString s2):A(time,s1,s2)
{
}

然后我有这样使用:
CArray<A, A&> infoes;
CForumInfo forumInfo1(CTime::GetCurrentTime(),"haha","heihei");
CForumInfo forumInfo2(CTime::GetCurrentTime(),"haha","heihei");
infoes.Add(forumInfo1);
infoes.Add(forumInfo2);

编译的时候就会出现错误:
error C2512: 'CInfomation' : no appropriate default constructor available

这个怎么解决啊?
我用CArray就是想做一个A的数组,里面包含派生自A的B等对象。
第一次用CArray这种高级的东西,就碰壁了!!!
...全文
127 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinglbo 2009-08-16
就是使用第一句的时候就出现了那个错误!
即CArray <CInfomation, CInfomation&> infoes;
我不知道这句为什么要求CInfomation要有个默认的构造函数呢?
回复
zhugay 2009-08-16
[Quote=引用 7 楼 dinglbo 的回复:]
引用楼主 dinglbo 的回复:
我有定义了一个类A:
class A
{
public:
A(CTime time, CString s1,CString s2);
virtual ~A();

};
类B:
class B : public A
{
public:
B(CTime time, CString s1,CString s2);
virtual ~B();

};

B的构造函数是这样写的:
B::B(CTime time, CString s1,CString s2):A(time,s1,s2)
{
}

然后我有这样使用:
CArray <A, A&> infoes;
CForumInfo forumInfo1(CTime::GetCurrentTime(),"haha","heihei");
CForumInfo forumInfo2(CTime::GetCurrentTime(),"haha","heihei");
infoes.Add(forumInfo1);
infoes.Add(forumInfo2);

编译的时候就会出现错误:
error C2512: 'CInfomation' : no appropriate default constructor available

这个怎么解决啊?
我用CArray就是想做一个A的数组,里面包含派生自A的B等对象。
第一次用CArray这种高级的东西,就碰壁了!!!


我试了一下,把第1 4 5三条语句注释掉,就可以通过编译,但一有了那个
CArray <CInfomation, CInfomation&> infoes;
就会出现这个错误!

所以我觉得这个应该是跟CArray有关吧。。。
[/Quote]
说的对,和4 5语句有关,CArray::Add(一个对象),应该是把该对象拷贝一次,存储的是它的拷贝,大概需要有个默认构造函数吧。具体的,看看c++语法
回复
dinglbo 2009-08-16
[Quote=引用楼主 dinglbo 的回复:]
我有定义了一个类A:
class A 
{
public:
A(CTime time, CString s1,CString s2);
virtual ~A();

};
类B:
class B : public A 
{
public:
B(CTime time, CString s1,CString s2);
virtual ~B();

};

B的构造函数是这样写的:
B::B(CTime time, CString s1,CString s2):A(time,s1,s2)
{
}

然后我有这样使用:
CArray <A, A&> infoes;
CForumInfo forumInfo1(CTime::GetCurrentTime(),"haha","heihei");
CForumInfo forumInfo2(CTime::GetCurrentTime(),"haha","heihei");
infoes.Add(forumInfo1);
infoes.Add(forumInfo2);

编译的时候就会出现错误:
error C2512: 'CInfomation' : no appropriate default constructor available

这个怎么解决啊?
我用CArray就是想做一个A的数组,里面包含派生自A的B等对象。
第一次用CArray这种高级的东西,就碰壁了!!!
[/Quote]

我试了一下,把第1 4 5三条语句注释掉,就可以通过编译,但一有了那个
CArray <CInfomation, CInfomation&> infoes;
就会出现这个错误!

所以我觉得这个应该是跟CArray有关吧。。。
回复
healer_kx 2009-08-16
就是说自己当初也没有学清楚呗? 我觉得taodm会这么说。
回复
声明一个无参的构造函数
回复
dinglbo 2009-08-16
还是少改了一个,构造函数那儿,不过应该不影响意思的表达了。。。
回复
dinglbo 2009-08-16
[Quote=引用 2 楼 ouyh12345 的回复:]
error C2512: 'CInfomation' : no appropriate default constructor available

这个错误和array有关系吗?
错误说CInfomation没有相应的构造函数
[/Quote]

不好意思。。。为了图简便,用了A、B之类的,但又没改完。。。
正确的如下面:


我有定义了一个类CInfomation:
class CInfomation
{
public:
CInfomation(CTime time, CString s1,CString s2);
virtual ~CInfomation();

};
类CForumInfo:
class CForumInfo : public CInfomation
{
public:
CForumInfo(CTime time, CString s1,CString s2);
virtual ~CForumInfo();

};

B的构造函数是这样写的:
CForumInfo::CForumInfo(CTime time, CString s1,CString s2):CInfomation(time,s1,s2)
{
}

然后我有这样使用:
CArray <CInfomation, CInfomation&> infoes;
CForumInfo forumInfo1(CTime::GetCurrentTime(),"haha","heihei");
CForumInfo forumInfo2(CTime::GetCurrentTime(),"haha","heihei");
infoes.Add(forumInfo1);
infoes.Add(forumInfo2);

编译的时候就会出现错误:
error C2512: 'CInfomation' : no appropriate default constructor available

这个怎么解决啊?
我用CArray就是想做一个A的数组,里面包含派生自A的B等对象。
第一次用CArray这种高级的东西,就碰壁了!!!
回复
ouyh12345 2009-08-16
error C2512: 'CInfomation' : no appropriate default constructor available

这个错误和array有关系吗?
错误说CInfomation没有相应的构造函数
回复
dinglbo 2009-08-16
自已SF
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告