读书人

请问一个C++类申明的有关问题

发布时间: 2012-06-07 15:05:14 作者: rapoo

请教一个C++类申明的问题
class A;
class B
{
public:

A *m_a;
void fun()
{
m_a = new A;
};
};

class A
{

};

提示 error C2512: “A”: 没有合适的默认构造函数可用

[解决办法]
m_a = new A;

编译器必须首先知道类是怎么定义的,才可以创建对应指针。
你的前向声明forward declaration使用非法!

考虑把类A的声明放在前面:
class A
{
};

[解决办法]
new A的时候相当于调用A的构造函数,但在这之前A只是前向声明了一下,还没有正式声明,编译器并不知A有什么样的构造函数,所以会报错。

把下面的class A {};移到B的前面就没错了。

如果只是前向声明的情况,你只能用A*或A&。一旦要用到A的对象或者任何函数,编译器都会报错。
[解决办法]
学习,同意楼上看法
[解决办法]
在对类A进行动态分配空间时必须见到定义,因为要知道它的大小才能分配,类的声明只能定义相应指针,因为指针都是占一样的空间大小

读书人网 >C++

热点推荐