- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
请在将其标记为重复之前阅读此问题!
这个问题不是 this question 的重复问题或 this question或 this question ,虽然是相关的。我已经解决了所有这些问题以及更多问题。我有同样的基本问题,但我已经尝试了我找到的所有解决方案,但这些其他问题的解决方案都不适合我。
问题是 Eclipse C.D.T.不识别许多 C++ 标准函数和特性。这些无法识别的功能大部分来自 C++11。无法识别的功能包括关键字 nullptr
、变量 NULL
和函数 to_string()
, getLine()
, fstream.open()
, atoi()
, strcmp()
、stricmp()
等。
在名为 leeduhem 的用户和其他人的帮助下,我设法将 -std=c++11
标志添加到 Eclipse 的 g++
编译器命令中,因此错误在编译过程中消失了。
但是,Eclipse 仍然会用红色下划线标记这些方法和符号,并将它们标记为错误。
所以,总而言之,我的问题是:
如何让 Eclipse 识别代码编辑器中的 C++11 函数和符号?
我已经尝试了上面链接问题中的所有解决方案以及Eclipse's C++11 F.A.Q.中的解决方案。有和没有 this forum post 中提到的修改.仍然没有任何效果。
我最近在我的计算机上安装了带有 C/C++ 插件的 NetBeans,试图通过切换 I.D.E. 来解决这个问题,但是 NetBeans 有完全相同的错误。
我在 Linux Mint 16 Petra 上运行 Eclipse 3.8。我的主要编译器是 GCC/G++ 4.8.1,不过我相信我也可以使用 Cygwin。
这是有错误的代码示例:
#include <stdio.h>
#include <string>
#include <string.h>
using namespace std;
HubNode* hubs;
void debug();
void menu();
// main
int main() {
// initialize hubs
hubs = NULL;
// read Hub.csv
fstream hub_in;
hub_in.open("Hub.csv", ios::in);
if (!hub_in.is_open()) {
cout << "I couldn't open the Hub.csv file!";
return -1;
}
string read_name = "", read_location = "";
// skip the first line
getLine(hub_in, read_name);
if (read_name.empty()) {
cout << "The Hub.csv file was empty!";
return -1;
}
// then continue reading
while (getLine(hub_in, read_name, ',')) {
getLine(hub_in, read_location, '\n');
addHub(new HubNode(read_name, read_location));
}
// read Flight.csv
fstream flight_in;
flight_in.open("Flight.csv", ios::in);
if (!flight_in.is_open()) {
cout << "I couldn't open the Flight.csv file!";
return -1;
}
string read_number = "", read_price = "", read_source = "",
read_destination = "", read_minute = "", read_hour = "", read_day =
"", read_month = "", read_year = "", read_duration = "",
read_company = "";
// skip the first line
getLine(hub_in, read_number);
if (read_number.empty()) {
cout << "The Hub.csv file was empty!";
return -1;
}
// then continue reading
while (getLine(flight_in, read_number, ',')) {
getLine(flight_in, read_price, ',');
getLine(flight_in, read_source, ',');
getLine(flight_in, read_destination, ',');
getLine(flight_in, read_minute, '/');
getLine(flight_in, read_hour, '/');
getLine(flight_in, read_day, '/');
getLine(flight_in, read_month, '/');
getLine(flight_in, read_year, ',');
getLine(flight_in, read_duration, ',');
getLine(flight_in, read_company, '\n');
FlightNode* flight = new FlightNode(read_number,
atof(read_price.c_str()), read_company,
new Date_Time(atoi(read_minute.c_str()),
atoi(read_hour.c_str()), atoi(read_day.c_str()),
atoi(read_month.c_str()), atoi(read_year.c_str())),
atoi(read_duration.c_str()), read_source, read_destination);
}
cout << "Welcome to Ground Control! How may I assist you?";
menu();
string input;
cin >> input;
cin.ignore();
while (strcmp(input.c_str(), "q") != 0) {
if (strcmp(input.c_str(), "p") == 0)
debug();
else {
// TODO
}
cin >> input;
cin.ignore();
}
cout << "Have a nice flight!";
return -1;
}
// message utilities
void debug() {
HubNode* hub = hubs;
while (hub != NULL)
cout << hub->toString();
}
void menu() {
cout << "cmd | description";
cout
<< " p | prints the full list of airport hubs with all of their currently scheduled flight information";
// TODO
}
// Hub-managing utilities
bool addHub(HubNode* hub) {
// if hubs is null, make this hub the new head
if (hubs == NULL) {
hubs = hub;
return true;
}
// otherwise, find the end of the hubs list and add this hub to the end
HubNode* parser = hubs;
while (parser->next != NULL) {
// along the way, make sure this hub isn't already in the list
if (strcmp((parser->getName()).c_str(), (hub->getName()).c_str()) == 0)
return false;
parser = parser->next;
}
parser->next = hub;
return true;
}
HubNode* findHub(string name) {
HubNode* parser = hubs;
while (parser != NULL) {
if (strcmp((parser->getName()).c_str(), name.c_str()) == 0)
return parser;
parser = parser->next;
}
return NULL;
}
bool removeHub(HubNode* hub) {
return removeHub(hub->getName());
}
bool removeHub(string name) {
// check the first node alone first
if (hubs == NULL)
return false;
else if (strcmp((hubs->getName()).c_str(), name.c_str()) == 0) {
HubNode* to_remove = hubs;
hubs = hubs->next;
delete to_remove;
return true;
} else if (hubs->next == NULL)
return false;
HubNode* parser = hubs;
while (parser->next != NULL) {
if (strcmp((parser->next->getName()).c_str(), name.c_str()) == 0) {
HubNode* to_remove = parser->next;
parser->next = parser->next->next;
delete to_remove;
return true;
}
parser = parser->next;
}
return false;
}
有什么想法吗?
提前感谢您提供的任何帮助。在这一点上我非常绝望。这个问题极大地阻碍了我在 C++ 类项目上的进展,而且我几乎没有足够的经验来尝试在没有 I.D.E. 的情况下编写代码。 (我试过了。)
编辑:似乎有一些函数在从终端编译时甚至 g++
都无法识别,例如stricmp()
。我还不确定是否还有其他人,尽管它似乎能够理解 to_string
和其他一些人。不过,我的 G++ 版本是 4.8.1,这几乎是最新的稳定版本....这会导致 Eclipse 和 NetBeans 中的错误吗?
最佳答案
Eclipse 和 NetBeans IDE 很可能必须具有更新的解析器和词法分析器细节才能正确支持 C++11。希望有人已经为 C++11 完成了这项工作,并且可以发布更多详细信息。
NetBeans 似乎是用 Java 编写的,因为该产品的论坛有三个帖子讨论了较旧和较新 NetBeans 版本的过程。
开始编辑
我找到了一个非 Eclipse 帖子,它可能是 Eclipse IDE 中 C++11 关键字识别的解决方案。点评:How do I use a custom gcc toolchain with Eclipse? .它具有用于在 Eclipse 中更新 GCC toochain 的分步过程和屏幕截图。我希望 CLang 和 CLang++ 编译器的支持设置是相似的。外部文章来自此 SO 帖子:Eclipse IDE for C++ hooking up multiple compiler toolset
结束编辑
我现在没有更多时间按照 NetBeans 程序创建新的 NetBeans 解析器和词法分析器以支持 C++11。也许其他人已经这样做了,可以分享细节。我找到的帖子如下。请注意,这些教程适用于 NetBeans IDE 中的任何语言。
上述两个步骤必须按此顺序进行。如果不是,我不知道会发生什么,但可能不是预期的结果。
我希望有更多完整的帖子。也许其他用户只是忽略了 IDE 中不正确的关键字指示。 NetBeans 7.4 似乎非常适合使用 CLang++ 3.3 编译器进行编译。我在以 C++11 为中心的项目上没有 C++11 编译错误。 IDE 错误地指出 override
无效。
关于c++ - 我怎样才能使 Eclipse C.D.T.认识 C++11 的特性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22669809/
我对这个错误很困惑: Cannot implicitly convert type 'System.Func [c:\Program Files (x86)\Reference Assemblies\
考虑这段代码: pub trait Hello { fn hello(&self); } impl Hello for Any { fn hello(&self) {
问题很简单。是否可以构造这样一个类型 T,对于它下面的两个变量声明会产生不同的结果? T t1 = {}; T t2{}; 我已经研究 cppreference 和标准一个多小时了,我了解以下内容:
Intellij idea 给我这个错误:“Compare (T, T) in Comparator cannot be applied to (T, T)” 对于以下代码: public class
任何人都可以告诉我 : n\t\t\t\t\n\t\t\t 在以下来自和 dwr 服务的响应中的含义和用途是什么. \r\n\t\t\t \r\n\t\t\t
让 T 成为一个 C++ 类。 下面三个指令在行为上有什么区别吗? T a; T a(); T a = T(); T 为不带参数的构造函数提供了显式定义这一事实是否对问题有任何改变? 后续问题:如果
Rust中的智能指针是什么 智能指针(smart pointers)是一类数据结构,是拥有数据所有权和额外功能的指针。是指针的进一步发展 指针(pointer)是一个包含内存地
比如我有一个 vector vector > v={{true,1},{true,2},{false,3},{false,4},{false,5},{true,6},{false,7},{true,8
我有一个来自 .xls 电子表格的数据框,我打印了 print(df.columns.values) 列,输出包含一个名为:Poll Responses\n\t\t\t\t\t。 我查看了 Excel
This question already has answers here: What are good reasons for choosing invariance in an API like
指针类型作为类型前缀与在类型前加斜杠作为后缀有什么区别。斜线到底是什么意思? 最佳答案 语法 T/~ 和 T/& 基本上已被弃用(我什至不确定编译器是否仍然接受它)。在向新向量方案过渡的初始阶段,[T
我正在尝试找到一种方法来获取模板参数的基类。 考虑以下类: template class Foo { public: Foo(){}; ~Foo(){};
这是一个让我感到困惑的小问题。我不知道如何描述它,所以只看下面的代码: struct B { B() {} B(B&) { std::cout ::value #include
为什么有 T::T(T&) 而 T::T(const T&) 更适合 copy ? (大概是用来实现move语义的???) 原始描述(被melpomene证明是错误的): 在C++11中,支持了一种新
在 Java 7 中使用 eclipse 4.2 并尝试实现 List 接口(interface)的以下方法时,我收到了警告。 public T[] toArray(T[] a) { ret
假设有三个函数: def foo[T](a:T, b:T): T = a def test1 = foo(1, "2") def test2 = foo(List(), ListBuffer()) 虽
我对柯里化(Currying)和非柯里化(Currying)泛型函数之间类型检查的差异有点困惑: scala> def x[T](a: T, b: T) = (a == b) x: [T](a: T,
考虑一个类A,我如何编写一个具有与相同行为的模板 A& pretty(A& x) { /* make x pretty */ return x; } A pretty(A&& x) {
Eclipse 表示由于泛型类型橡皮擦,类型参数不允许使用 instanceof 操作。 我同意在运行时不会保留任何类型信息。但是请考虑以下类的通用声明: class SomeClass{ T
在 C++14 中: 对于任何整数或枚举类型 T 以及对于任何表达式 expr: 有没有区别: struct S { T t { expr }; }; 和 struct S { T t = { exp
我是一名优秀的程序员,十分优秀!