向前声明和类型名使用new关键字
-
26-09-2019 - |
题
我得到下面类中的一个声明类型B的一个新的指针的错误。请帮助。
#include <iostream>
namespace B
{
class b;
}
class a
{
private:
B::b* obj_b;
public:
a(){}
~a(){}
void create()
{
b* obj_b = new b;
}
};
class b
{
private:
a *obj_a;
public:
b()
{
obj_a->create();
}
~b(){}
};
int main()
{
b obj;
return 0;
}
解决方案
有在你的代码中的许多错误。这些都与前向声明,完全合格的名称的使用等等。
namespace B
{
class b;
}
class a
{
private:
B::b* obj_b; // change 1 (fully qualified name)
public:
void create(); // change 2 (can't use b's constructor now as B::b is not
// yet defined)
a(){}
~a(){}
};
class B::b // change 3 (fully qualified name)
{
private:
a *obj_a;
public:
b()
{
obj_a->create();
}
~b(){}
};
void a::create() // definition of B::b's constructor visible now.
{
B::b* obj_b = new B::b; // And here also use fully qualified name
}
int main()
{
B::b obj;
return 0;
}
其他提示
b* obj_b = new b;
还有就是你的问题。你可以声明一个指向B,因为指针是一样的大小,但不能构建一个或采取一个由值,而不提供类定义编译器。如何将有可能知道如何为未知类型分配内存?
不隶属于 StackOverflow