我在将类作为C ++程序的一部分编写时遇到问题-其中有三个类,FirstClass,SecondClass和ThirdClass-First和Second类都包含ThirdClass.h,在SecondClass中,我可以正常地声明它们,但是,在FirstClass中,第一个声明可以正常工作,但是任何其他声明都会给我一个错误,指出“ ThirdClass不是类型名称”
这是该类的错误片段
#include "ThirdClass.h"
class FirstClass
{
public:
FirstClass(void);
// This decleration of ThirdClass works fine
FirstClass(ThirdClass ());
FirstClass(const FirstClass& rhs);
~FirstClass(void);
private:
//These are the two that're erroring
ThirdClass nestedClass();
void Init (ThirdClass ());
void Copy (FirstClass);
};
我以为这都是因为它们都链接到相同的头文件,但是我一直在四处寻找,试图在网上找不到解决方案。
我确实设法通过将include放置在命名空间中来使其正常工作,但是我也读到这是非常糟糕的做法,所以我真的不想那样做。
最佳答案
FirstClass(ThirdClass ());
这应该怎么办?
如果已声明类型
ThirdClass
,则它声明一个构造函数,该构造函数将函数的地址作为其参数,这不是您想要的,对吗? ThirdClass ()
是不带任何参数并返回ThirdClass
的函数的类型,因此构造函数参数是该类型的函数(的地址)。如果未声明
ThirdClass
(并且您收到的错误暗示它尚未声明),则等效于:FirstClass ThirdClass();
即称为
ThirdClass
的(非构造函数)函数,该函数返回FirstClass
对象。您可能希望它是一个以
ThirdClass
对象作为参数的构造函数,它是:FirstClass(ThirdClass);
或避免复制参数(通常是您想要的):
FirstClass(const ThirdClass&);
对于您的
Init
函数也是如此。错误提示
ThirdClass
不是类型名称,表明尚未声明该类型。我们只能猜测是因为您没有显示完整的独立示例(您没有cookie),但是您在#include "FirstClass.h"
标头中可能有ThirdClass.h
,这会导致循环引用,并且只有其中一个文件被正确处理。有关更多信息,请参见以下问题(及其答案):
cyclic dependency between header files
C++ cyclical header dependency
C++ error: 'Line2' has not been declared
关于c++ - 在类中声明类的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14103304/