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

时间:2011-03-03 00:05:15

标签: c++

快速了解我如何做到这一点。

  1. 创建结构
  2. 创建了 .cpp 文件
  3. 使用 CMake 创建制作文件
  4. Ran 制作并收到错误
  5. 我正在尝试编译以下代码:

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

6 个答案:

答案 0 :(得分:6)

enum UnitType { Meter, Inch };

在这里,您已将Meter定义为枚举值。

class Meter {

...但是在这里(在同一范围内)你试图将它重新定义为类的名称。这是合法的,以后要使用它,你必须使用class Meter,而不只是Meter

class Meter meter(1.0);

IMO,即使你 可以使用相同的名称,但它可能会导致混乱和通过简单地重命名其中一个(或两个)来避免更多问题。< / p>

答案 1 :(得分:1)

在阅读此示例时,我突然想到了一些事情

  1. convertTo方法不会在所有代码路径上返回
  2. convertTo方法在结束;后有一个}
  3. 标识符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。