namespace chk{
class Car;
Car abc()
{
return Car();
}
class Car
{
private:
int sides;
public:
Car()
{
std::cout<<"\ndefault called constructor";
}
Car(int nsides)
{
std::cout<<"\ncalled constructor";
sides=nsides;
}
~Car()
{
std::cout<<"\nDeleting objext";
}
};
/* Car abc()
{
return Car();
}*/
}
我收到上述代码的以下错误:-
check.cpp: In function ‘chk::Car chk::abc()’:
check.cpp:25: error: return type ‘struct chk::Car’ is incomplete
check.cpp:27: error: invalid use of incomplete type ‘struct chk::Car’
check.cpp:24: error: forward declaration of ‘struct chk::Car’
现在,当取消注释下面的abc()并注释上面的abc()时,它可以正常工作。
为什么C++不允许我在 namespace 内转发声明类?
最佳答案
C++不允许的是具有以下功能
Car abc()
{
return Car();
}
没有
Car
类的定义。这是必需的,因为a)需要Car
对象的大小,并且b)调用了该类的默认构造函数。没有类定义,就无法知道构造函数是否存在。关于c++ - 在 namespace 中向前声明类,引发编译器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17253761/