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

forward declaration of a class having static member

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

ERROR: Invalid use of incomplete type 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;
}

前向声明 class 是对编译器的承诺,它会在稍后的某个时间点提供定义。在 return 中,编译器允许您在不需要 class 内容的其他声明中使用前向声明的 class,例如声明指针或引用。

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

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