Can';t定义++;C+中的运算符+;,什么';这里的问题是什么? 我正在通过Bjarne Stroustrup的C++编程语言工作,我被困在其中一个例子中。这是代码,除了空格差异和注释之外,我的代码与书中的代码相同(第51页)

Can';t定义++;C+中的运算符+;,什么';这里的问题是什么? 我正在通过Bjarne Stroustrup的C++编程语言工作,我被困在其中一个例子中。这是代码,除了空格差异和注释之外,我的代码与书中的代码相同(第51页),c++,c++11,enums,switch-statement,operator-overloading,C++,C++11,Enums,Switch Statement,Operator Overloading,然而,当我在Mac OS X 10.9上使用clang++-std=c++11-stdlib=libc++-Weverything main.cpp编译它时,我得到了以下错误: main.cpp:24:9: error: expected expression switch (t) { ^ main.cpp:32:6: error: expected ';' at end of declaration } ^ ; 真正的baffere

然而,当我在Mac OS X 10.9上使用
clang++-std=c++11-stdlib=libc++-Weverything main.cpp
编译它时,我得到了以下错误:

main.cpp:24:9: error: expected expression
        switch (t) {
        ^
main.cpp:32:6: error: expected ';' at end of declaration
    }
     ^
     ;

真正的bafferer是
期望的表达式
错误,但是
期望的表达式也是有问题的。我做了什么?

交通灯和操作员++(交通灯和t)是一个名为操作员++的函数。每个功能应在任何其他功能之外定义。因此,将操作符的定义放在main之前。

Traffic\u light&operator++(Traffic\u light&t)是一个名为operator++的函数。每个功能应在任何其他功能之外定义。因此,将运算符的定义放在main之前。

您有几个问题:

首先,您试图在另一个函数(
main
)中实现一个函数(
operator++
)。C++不允许这样做(除了lambdas)。< /p>
其次,您只实现了前缀增量,因此
++light
可以工作,但
light++
不能。你应该同时实现它们。可以找到一个例子。

您有几个问题:

首先,您试图在另一个函数(
main
)中实现一个函数(
operator++
)。C++不允许这样做(除了lambdas)。< /p>
其次,您只实现了前缀增量,因此
++light
可以工作,但
light++
不能。你应该同时实现它们。可以找到它的一个示例。

在这里您可以运行代码:

#包括
#包括
#包括
枚举类交通灯{
绿色
黄的
红色
};
交通灯和操作员++(交通灯和t){
开关(t){
案例交通灯::绿色:
t=交通灯:黄色;
打破
案例交通灯::黄色:
t=交通灯:红色;
打破
案例交通灯::红色:
t=交通灯::绿色;
打破
}
返回t;
}

std::ostream&operator在这里您可以运行代码:

#包括
#包括
#包括
枚举类交通灯{
绿色
黄的
红色
};
交通灯和操作员++(交通灯和t){
开关(t){
案例交通灯::绿色:
t=交通灯:黄色;
打破
案例交通灯::黄色:
t=交通灯:红色;
打破
案例交通灯::红色:
t=交通灯::绿色;
打破
}
返回t;
}

std::ostream&operator您试图在函数中定义函数。你不能。只是在你的主函数之外去做……你正在试图在一个函数里面定义一个函数。你不能。只是在你的主要功能之外做……这就是问题所在。谢谢我已经习惯了JavaScript这样的语言,在那里你可以把函数放在任何你想要的地方。我会尽快接受答案。(愚蠢的延时)这就是问题所在。谢谢我已经习惯了JavaScript这样的语言,在那里你可以把函数放在任何你想要的地方。我会尽快接受答案。(愚蠢的延时)C/C++允许在另一个函数中声明一个函数。它们不允许定义函数。C/C++允许在另一个函数中声明一个函数。它们不允许定义函数。
main.cpp:24:9: error: expected expression
        switch (t) {
        ^
main.cpp:32:6: error: expected ';' at end of declaration
    }
     ^
     ;
#include <iostream>
#include <string>
#include <vector>

enum class Traffic_light { 
    green, 
    yellow, 
    red
};

Traffic_light & operator++(Traffic_light & t) {
    switch (t) {
        case Traffic_light::green:
            t = Traffic_light::yellow;
        break;
        case Traffic_light::yellow:
            t = Traffic_light::red;
        break;
        case Traffic_light::red:
            t = Traffic_light::green;
        break;
    }
    return t;
}

std::ostream& operator<<(std::ostream& os, Traffic_light & t)
{
    switch(t)
    {
        case Traffic_light::green:
            os << "green";
        break;
        case Traffic_light::yellow:
            os << "yellow";
        break;
        case Traffic_light::red:
            os << "red";
        break;
    }
    return os;

}

int main()
{
    Traffic_light light = Traffic_light::red;

    std::cout << "Ligth:" << ++light << std::endl;
    std::cout << "Ligth:" << ++light << std::endl;
    std::cout << "Ligth:" << ++light << std::endl;

    return 0;
}