错误预期';' 在实例之前

E-r*_*ich 2 c++

快速概述我是如何做到这一点的.

  1. 创建了结构
  2. 创建.cpp文件
  3. 使用CMake创建Make文件
  4. 使接收的错误

我正在尝试编译以下代码:

#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++经验,但这段代码看起来语法正确.有没有人看到或知道什么是错的?

Jer*_*fin 6

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,即使你可以使用相同的名称,它也可能导致混乱和问题,只需重命名一个或另一个(或两者),就可以更好地避免这些问题.