【发布时间】: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