Can';t定义++;C+中的运算符+;,什么';这里的问题是什么? 我正在通过Bjarne Stroustrup的C++编程语言工作,我被困在其中一个例子中。这是代码,除了空格差异和注释之外,我的代码与书中的代码相同(第51页)
然而,当我在Mac OS X 10.9上使用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
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;
}