【问题标题】:Cpp forward class declaration and unionCpp 前向类声明和联合
【发布时间】:2023-11-10 20:15:01
【问题描述】:

当我尝试在联合定义中使用 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);
};

【问题讨论】:

  • 这真的是你的文件的样子吗?似乎DataUnion 是在不同的命名空间(mate::) 中定义的。
  • 对不起@Filip-Kočica 我用 DataType 定义更新了我的帖子。类Data、联合DataUnion和枚举DataType在同一个命名空间mate
  • 这似乎是我的 VS Code 中的一个错误
  • std::boost:: variant 可能对替换您的工会有用。

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


【解决方案1】:

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 无关。

【讨论】: