我已经遇到这个问题好几个星期了,但是找不到解决办法。
当尝试使用Eclipse或尝试通过终端使用普通GCC或G ++进行编译时,有许多标识函数(加上“NULL”变量)无法识别,包括to_string方法。
我试图在程序中添加许多不同的标题以尝试查找正确的文件,但无济于事。我已经尝试了#including <string>, <stdio.h>, <stddef.h>, <cstdlib>
,几乎任何其他标准的标题我可以在论坛帖子中找到,可能包含to_String函数。我甚至在没有“.h”扩展名的情况下使用AND尝试了所有这些#includes。不过,无论我尝试什么,都无法识别to_string和NULL(以及其他方法)。
我经历了很多论坛和许多论坛帖子并尝试了很多解决方案,包括this one,this one,this one,this one,this one,和更多。不过,我找不到任何解决方案。
我尝试卸载并重新安装Eclipse C.D.T.,Eclipse作为一个整体,GCC和G ++。我尝试在GCC命令或g ++命令中添加-std = c ++ 11和/或-std = c ++ 99标志。我尝试使用Linux GCC,Cross GCC和其他版本的GCC在Eclipse中构建。
我和J.D.T.一起运行Eclipse 3.8。和C.D.T.安装在64位Linux Mint 16 Petra上的软件包。
如果有人能帮我解决这个问题,“感恩”就不能正确表达我对你的感激之情。
编辑:
以下是gcc -v
的输出:
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.8.1-10ubuntu9' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu9)
以下是有错误代码的代码示例。请记住,我试图添加其他目前未显示的#includes,我有理由相信缺少#include不是问题。
#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;
int Month[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
string x;
class Date_Time {
private:
int minute, hour, day, month, year;
public:
Date_Time(int minute, int hour, int day, int month, int year) {
this->minute = minute;
this->hour = hour;
this->day = day;
this->month = month;
this->year = year;
}
string toString() {
string min = to_string(minute);
if (min.length() == 1)
min = '0' + min;
return to_string(month) + "/" + to_string(day) + "/" + to_string(year)
+ " " + to_string(hour) + ":" + min;
}
void addMinutes(int min) {
minute = min + minute;
if (minute > 59) {
minute = minute - 60;
hour = hour + 1;
}
if (hour > 24) {
hour = hour - 24;
day = day + 1;
}
if (day > Month[month])
day = day - Month[month];
month = month + 1;
if (month > 12) {
month = 1;
year = year + 1;
}
}
int getYear() {
return year;
}
int getMonth() {
return month;
}
int getDay() {
return day;
}
int getHour() {
return hour;
}
int getMinutes() {
return minute;
}
};
编辑:以下评论的摘要是我们确定原因是Eclipse没有识别C ++ 11标准函数和关键字。我使用他们的C / C ++插件在我的系统上安装了NetBeans,并且发生了完全相同的错误。尽管在项目配置中的多个位置添加了-std=c++11
标志,但我似乎无法让NetBeans或Eclipse识别C ++ 11功能。
到目前为止,Eclipse最终可以编译而不会产生C ++ 11错误;但是,在代码窗口中,C ++ 11函数和功能仍然标记为带有红色下划线的错误,因此问题仍未完全解决。我只需要有人告诉我如何让Eclispe和/或NetBeans在其错误解析器中识别C ++ 11的功能。
再次感谢您提供的任何帮助。
答案 0 :(得分:1)
尝试使用
编译源代码g++ -std=c++11 ...
根据to_string()
,它是C ++ 2011功能。
在Eclipse Kepler中,您可以通过选择
来设置它项目&gt;&gt;属性&gt;&gt; C / C ++ Build&gt;&gt;设置&gt;&gt;工具设置&gt;&gt; GCC C ++编译器&gt;&gt;方言
并为ISO C++11 (-std=c++0x)
选择Language standard
。
您应该在[All configurations]
选择Configuration
C/C++ Build
。