• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

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这种高级的东西,就碰壁了!!!
...全文
129 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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相关问题讨论
申请成为版主
帖子事件
创建了帖子
2009-08-16 04:45
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……