快速了解我如何做到这一点。
我正在尝试编译以下代码:
#include <iostream>
using namespace std;
enum UnitType { Meter, Inch };
class Meter {
double value;
public:
Meter(double value) : value(value) {}
double convertTo(UnitType unit) {
if (unit == Inch) {
return value * 39.3700787;
}
};
};
int main (int argc, char *argv[])
{
try
{
Meter meter(1.0);
}
catch (int e) {
cout << "exception " << e << endl;
}
return 0;
}
但是,我收到以下错误:
$ make [100%] Building CXX object CMakeFiles/convert-length.dir/convert-length.cpp.o /convert/length/convert-length.cpp: In function ‘int main(int, char**)’: /convert/length/convert-length.cpp:27: error: expected ‘;’ before ‘meter’ make[2]: *** [CMakeFiles/convert-length.dir/convert-length.cpp.o] Error 1 make[1]: *** [CMakeFiles/convert-length.dir/all] Error 2 make: *** [all] Error 2
我希望这是一个愚蠢的C ++语法错误,我错过了,但我花了几个小时寻找它并没有成功。我有很少的C ++经验,但这段代码看起来语法正确。有没有人看到或知道什么是错的?
答案 0 :(得分:6)
enum UnitType { Meter, Inch };
在这里,您已将Meter
定义为枚举值。
class Meter {
...但是在这里(在同一范围内)你试图将它重新定义为类的名称。这是合法的,但以后要使用它,你必须使用class Meter
,而不只是Meter
:
class Meter meter(1.0);
IMO,即使你 可以使用相同的名称,但它可能会导致混乱和通过简单地重命名其中一个(或两个)来避免更多问题。< / p>
答案 1 :(得分:1)
在阅读此示例时,我突然想到了一些事情
convertTo
方法不会在所有代码路径上返回convertTo
方法在结束;
后有一个}
。 Meter
列出两次:枚举值和类名。 答案 2 :(得分:1)
正如大家都指出的那样:Meter既是枚举又是类名。
一个允许你保持同名的小技巧:
class UnitType
{
public:
enum UnitType { Meter, Inch };
};
int main()
{
// Meter enum is now inside the scope of UnitType
UnitType::UnitType type = UnitType::Meter;
Meter meter(1.0);
}
答案 3 :(得分:0)
重命名枚举成员“Meter”或类名“Meter”
答案 4 :(得分:0)
将枚举中的“Meter”更改为其他内容,因为它与类名“Meter”冲突。
其次,在“unit!= Inch”的情况下,你需要为函数“convertTo”添加一个返回值。
答案 5 :(得分:0)
将枚举类型更改为METER和INCH,因为您甚至将类名称作为Meter。