我在一个Eclipse MARS C++项目中工作。尽管Eclipse不断显示一些错误,但以下代码的编译和执行都非常完美。
代码:
#include <iostream>
#include <ratio>
#include <chrono>
using namespace std;
int main()
{
typedef std::chrono::duration<int> seconds_type;
typedef std::chrono::duration<int,std::milli> milliseconds_type;
typedef std::chrono::duration<int,std::ratio<60*60>> hours_type;
hours_type h_oneday (24);
seconds_type s_oneday (60*60*24);
milliseconds_type ms_oneday (s_oneday);
seconds_type s_onehour (60*60);
hours_type h_onehour (std::chrono::duration_cast<hours_type>(s_onehour));
milliseconds_type ms_onehour (s_onehour);
std::cout << ms_onehour.count() << "ms in 1h" << std::endl;
}
错误:
- 无法解析符号"duration"
- 无法解析类型"std::milli"
- 无法解析符号"ratio"
- 无法解析符号"duration_cast"
- 无法解析方法"count"
- "std::endl"的重载无效
我认为所有的错误都是关于包含的东西。
构建时的消息:
Invoking: Cross G++ Compiler
g++ -D__GXX_EXPERIMENTAL_CXX0X__ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/Teste.d" -MT"src/Teste.o" -o "src/Teste.o" "../src/Teste.cpp"
Finished building: ../src/Teste.cpp
Building target: Teste
Invoking: Cross G++ Linker
g++ -o "Teste" ./src/Teste.o
Finished building target: Teste
我已经在"项目">"属性">"C/C++构建">"设置">"其他"上放置了-std=c++11
。
我已经把__GXX_EXPERIMENTAL_CXX0X__
放在C/C++GENERAL上了>路径和符号>符号。
我已经清理并重建了它,关闭并重新打开了它(项目和eclipse),但什么都没发生。这是一个1文件的项目,Eclipse如何在其中找到8个错误并仍然编译和执行它?我想只是编辑在惹我。有人能帮我摆脱这些错误吗?
不要相信Eclipse、Visual Studio或任何其他IDE。他们用来在编辑器中为您提供"红色歪歪扭扭"的解析器是,而不是真正的编译器。它有不同的bug,有不同级别的标准遵从性,解析代码的时间非常少(因为它是交互式的)。它将给出错误的结果。
编辑器中的解析器很好,很有用;方便的工具。但它们是而不是编译器本身,它们不应被解释为仅仅是有用的提示。