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
不是指针-这段代码毫无意义,无法编译。