我怎样才能制作Eclipse C.D.T.认识C ++ 11的功能?

时间:2014-03-26 18:21:42

标签: c++ eclipse c++11 netbeans g++

请在将此问题标记为重复之前阅读此问题!

此问题与this questionthis questionthis question不重复,但它是相关的。我已经完成了所有这些问题以及更多问题。我有同样的基本问题,但我已经尝试了我找到的所有解决方案,这些其他问题的解决方案都没有对我有用。

问题是 Eclipse C.D.T.不承认许多C ++标准函数和功能。大多数无法识别的功能来自C ++ 11。无法识别的功能包括关键字nullptr,变量NULL和函数to_string(),{{1 }},getLine()fstream.open()atoi()strcmp()等。

在名为leeduhem和其他人的用户的帮助下,我设法将stricmp()标志添加到Eclipse的-std=c++11编译器命令中,因此编译过程中的错误消失了。

然而, Eclipse仍然以红色突出显示这些方法和符号,并将其标记为错误。

因此,总的来说,我的问题是:

如何让Eclipse在代码编辑器中识别C ++ 11函数和符号?

我已尝试过上述问题中的所有解决方案以及Eclipse's C++11 F.A.Q.中的解决方案,无论是否有this forum post中提到的修改。但是,没有任何作用。

我最近使用C / C ++插件在我的计算机上安装了NetBeans,尝试通过切换I.D.E.s来解决问题,但是 NetBeans具有完全相同的错误

我在Linux Mint 16 Petra上运行Eclipse 3.8。我的主要编译器是GCC / G ++ 4.8.1,但我相信我也有Cygwin可用。

以下是有错误的代码示例:

g++

有什么想法吗?

提前感谢您提供的任何帮助。在这一点上,我非常绝望。这个问题极大地阻碍了我在C ++类项目上取得的进展,而且我没有足够的经验来尝试在没有I.D.E的情况下编写代码。 (我已经尝试过了。)

编辑:似乎有一些功能甚至#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; } 无法识别从终端进行编译时,例如g++。我还不确定是否有其他人,尽管它似乎能够理解stricmp()和其他一些人。我的G ++版本是4.8.1,这几乎是最新的稳定版本....这可能导致Eclipse和NetBeans中的错误吗?

1 个答案:

答案 0 :(得分:1)

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过程来为C ++ 11支持创建新的NetBeans解析器和词法分析器。也许其他人已经这样做了并且可以分享细节。我发现的帖子如下。请注意,这些是 NetBeans IDE中任何语言的教程。

上述两个步骤必须按此顺序进行。如果没有,我不知道会发生什么,但可能不是预期的结果。

我希望有更完整的帖子。也许其他用户只是忽略了IDE中不正确的关键字指示。 NetBeans 7.4似乎与CLang ++ 3.3编译器完美匹配。我在C ++ 11中心项目上没有C ++ 11编译错误。 IDE不正确地说override无效。