我在下面的代码中做错了什么。我收到以下编译错误:
错误:无效使用不完整类型
classSample
但我已经向前宣布了class Sample
。
class Sample;
int Sample::objCount = 0;
class Sample
{
public:
static int objCount;
Sample()
{
Sample::objCount++;
std::cout<< "creating object = "<<Sample::objCount<<std::endl;
}
~Sample()
{
Sample::objCount--;
std::cout<< "destroying object = "<<Sample::objCount<<std::endl;
}
};
int main()
{
Sample obj;
return 0;
}
答案 0 :(得分:4)
向前声明一个类是对编译器的承诺,以便稍后提供定义。作为回报,编译器允许您在其他声明中使用前向声明的类,其中不需要类的内容,例如声明指针或引用。
定义类的成员依赖于对类内容的了解。因此,简单的前向声明不再足够:必须定义您的类,以便编译器正确处理其成员定义。
在您的示例中,不需要前向声明。您应该将类定义移动到头文件中,将其包含在main
文件中,然后将Sample::objCount
移动到main
文件中,或移动到单独的sample.cpp
文件中。 / p>