2

尝试执行此操作时出现此错误:

#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;
    }
};

有什么不对?

4

2 回答 2

7

将初始化移出类体:

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

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

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

请注意,我已删除new: 它返回一个指针,并且此代码中不涉及任何指针。

于 2013-04-15T06:09:52.720 回答
-2

的大小VertexStatus直到它被完全声明后才知道,它并没有在它自己的定义中。

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

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

VertexStatus::Discovered = new VertexStatus(1);

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

于 2013-04-15T06:10:00.740 回答