具有静态成员的类的前向声明

时间:2018-04-18 13:46:12

标签: c++ static-members forward-declaration

我在下面的代码中做错了什么。我收到以下编译错误:

  

错误:无效使用不完整类型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;
}

1 个答案:

答案 0 :(得分:4)

向前声明一个类是对编译器的承诺,以便稍后提供定义。作为回报,编译器允许您在其他声明中使用前向声明的类,其中不需要类的内容,例如声明指针或引用。

定义类的成员依赖于对类内容的了解。因此,简单的前向声明不再足够:必须定义您的类,以便编译器正确处理其成员定义。

在您的示例中,不需要前向声明。您应该将类​​定义移动到头文件中,将其包含在main文件中,然后将Sample::objCount移动到main文件中,或移动到单独的sample.cpp文件中。 / p>