我的code:
#include <iostream>
enum EnvelopeMultiPointsType {
ENVELOPE_MULTI_POINTS_TYPE_NORMAL = 0,
ENVELOPE_MULTI_POINTS_TYPE_KICK_PITCH,
kNumEnvelopeMultiPointsTypes
};
class EnvelopeMultiPoints
{
public:
EnvelopeMultiPoints(EnvelopeMultiPointsType type) : mType(type) {
std::cout << mType << std::endl;
}
~EnvelopeMultiPoints() { };
private:
EnvelopeMultiPointsType mType;
};
class Test
{
public:
Test() { };
~Test() { };
private:
EnvelopeMultiPoints mEnv(EnvelopeMultiPointsType::ENVELOPE_MULTI_POINTS_TYPE_NORMAL);
};
int main()
{
Test test;
}
似乎我无法使用该枚举初始化一个类。不知道为什么。我在这里错过了什么?
在线编译器说没有命名的类型&#39; ENVELOPE_MULTI_POINTS_TYPE_NORMAL&#39;在&EnvelopeMultiPointsType&#39; 中,但它在上面声明。
答案 0 :(得分:5)
这一行
EnvelopeMultiPoints mEnv(EnvelopeMultiPointsType::ENVELOPE_MULTI_POINTS_TYPE_NORMAL);
被解析为函数mEnv
的声明,它返回EnvelopeMultiPoints
并将不存在的EnvelopeMultiPointsType::ENVELOPE_MULTI_POINTS_TYPE_NORMAL
类型的1个变量作为单个未命名参数。
将此变量初始化为:
EnvelopeMultiPoints mEnv = EnvelopeMultiPointsType::ENVELOPE_MULTI_POINTS_TYPE_NORMAL;
答案 1 :(得分:2)
当你想要做内联初始化成员变量时,你必须使用大括号或等于初始化。
即。任
// Use braces
EnvelopeMultiPoints mEnv{EnvelopeMultiPointsType::ENVELOPE_MULTI_POINTS_TYPE_NORMAL};
或者
// Use equal
EnvelopeMultiPoints mEnv = EnvelopeMultiPointsType::ENVELOPE_MULTI_POINTS_TYPE_NORMAL;
这是一种防止the most vexing parse含糊不清的方法。
阅读,例如this member initialization reference了解更多信息。