结构构造函数中不允许使用不完整类型

时间:2013-04-15 06:07:25

标签: 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)
    {
        this->_CurrentStatus = iStatus;
    }
};

有什么不对吗?

2 个答案:

答案 0 :(得分:7)

将初始化移出类体:

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

VertexStatus VertexStatus::Discovered(1); // definition (with initializer)

如果在头文件中声明了类,则将最后一行(定义)放入相应的.cpp文件中。

请注意,我已删除new:它返回一个指针,此代码中没有指针。

答案 1 :(得分:-2)

VertexStatus的大小在完全声明之后才知道,但它没有在其自己的定义中。

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

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

VertexStatus::Discovered = new VertexStatus(1);

如果这是在头文件中,你需要将最后一行放在相应的.cpp文件中。