快速概述我是如何做到这一点的.
我正在尝试编译以下代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
$ 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++经验,但这段代码看起来语法正确.有没有人看到或知道什么是错的?
enum UnitType { Meter, Inch };
Run Code Online (Sandbox Code Playgroud)
在这里,您已定义Meter为枚举值.
class Meter {
Run Code Online (Sandbox Code Playgroud)
...但是在这里(在相同的范围内)你试图将它重新定义为类的名称.这是合法的,但是为了以后再使用它,你必须使用class Meter,而不仅仅是Meter:
class Meter meter(1.0);
Run Code Online (Sandbox Code Playgroud)
IMO,即使你可以使用相同的名称,它也可能导致混乱和问题,只需重命名一个或另一个(或两者),就可以更好地避免这些问题.
| 归档时间: |
|
| 查看次数: |
1313 次 |
| 最近记录: |