CPP转发类声明和联合

时间:2018-07-25 10:22:24

标签: c++ visual-studio-code unions forward-declaration

当我尝试在联合定义中使用Cpp转发类声明时,我从VS Code中收到以下错误。

variable "mate::Data" is not a type name
class std::vector<<error-type> *>

出问题了吗还是VS Code错误?

Cpp forward class declaration and union - VS Code error

class Data;

enum DataType
{
    DATA_UNIT_TYPE_BOOLEAN,
    DATA_UNIT_TYPE_NUMBER,
    DATA_UNIT_TYPE_NUMBER_POSITIVE_INFINITY,
    DATA_UNIT_TYPE_NUMBER_NEGATIVE_INFINITY,
    DATA_UNIT_TYPE_STRING,
    DATA_UNIT_TYPE_OBJECT,
    DATA_UNIT_TYPE_ARRAY,
    DATA_UNIT_TYPE_NULL,
};

union DataUnion {
    bool boolValue;
    double numberValue;
    std::string* stringValue;
    std::vector<Data*>* arrayValue; // <- error here 
    std::map<std::string, Data*>* objectValue; // <- and there
};

class Data
{
private:
    DataType type;
    DataUnion value;
    bool hasNullValue;
public:
    ~Data();
    Data(DataType t);
    Data(DataType t, DataUnion v);
};

1 个答案:

答案 0 :(得分:0)

cannot reproduce your error,但您从未定义DataType。跟随Clang的输出here

main.cpp:18:5: error: unknown type name 'DataType'
    DataType type;
    ^
main.cpp:23:10: error: unknown type name 'DataType'
    Data(DataType t);
         ^
main.cpp:24:10: error: unknown type name 'DataType'
    Data(DataType t, DataUnion v);
         ^
3 errors generated.

提供一个定义,您应该会很好。这似乎与您拥有的DataUnion无关。