C++ 结构构造函数中不允许不完整的类型

C++ 结构构造函数中不允许不完整的类型,c++,C++,尝试执行此操作时,我遇到了以下错误: #include <iostream> using namespace std; struct VertexStatus { private: int _CurrentStatus; public: static VertexStatus Discovered = new VertexStatus(1); //incomplete type is not allowed VertexStatus(int iStatus)

尝试执行此操作时,我遇到了以下错误:

#include <iostream>
using namespace std;
struct VertexStatus
{
private:
    int _CurrentStatus;

public:
    static VertexStatus Discovered = new VertexStatus(1); //incomplete type is not allowed
    VertexStatus(int iStatus)
    {
        this->_CurrentStatus = iStatus;
    }
};
#包括
使用名称空间std;
结构顶点状态
{
私人:
int_当前状态;
公众:
发现的静态VertexStatus=新的VertexStatus(1);//不允许不完整的类型
顶点状态(int iStatus)
{
此->\u CurrentStatus=iStatus;
}
};

是否有问题?

将初始化移出类主体:

struct VertexStatus
{
    ...
    static VertexStatus Discovered; // declaration
    ...
};

VertexStatus VertexStatus::Discovered(1); // definition (with initializer)
如果类在头文件中声明,则将最后一行(定义)放入相应的
.cpp
文件中


请注意,我已经删除了
新的
:它返回一个指针,并且此代码中没有涉及任何指针。

直到它完全声明后,才知道它的大小,而它不在自己的定义内

而是在声明后初始化静态变量,如下所示:

struct VertexStatus {
    static VertexStatus Discovered;
    // ... other stuff
};

VertexStatus::Discovered = new VertexStatus(1);

如果这是在头文件中,你需要在对应的.CPP文件中放置最后一行。

这里,你不想使用<代码>新< /C>。很多错误,包括你似乎混淆java和C++的事实。请参阅NPE关于如何正确执行您正在尝试执行的操作的回答。@juanchopanza可能缺少格式化/复制/粘贴:)您认为如何定义包含该内容的内容?你会得到无限递归。
Discover
不是指针-这段代码毫无意义,无法编译。