Eclipse C.D.T. 无法识别标准功能或"NULL"



这个问题我已经困扰了几个星期了,一直没能找到解决办法。

当尝试使用Eclipse或尝试通过终端使用普通GCC或g++进行编译时,有许多标准函数(加上"NULL"变量)无法识别,包括to_string方法。

我尝试添加许多不同的头文件到程序中,试图找到正确的文件,但无济于事。我已经尝试过#including <string>, <stdio.h>, <stddef.h>, <cstdlib>,以及几乎任何其他标准头,我可以在论坛帖子中找到可能包含to_String函数。我甚至尝试了所有这些#include与AND没有"。h"扩展。然而,不管我怎么尝试,to_string和NULL都不能被识别(在其他方法中)。

我已经浏览了许多论坛和许多论坛帖子,尝试了许多解决方案,包括这个,这个,这个,这个,这个,还有更多。但是,我还是没有找到解决办法。

我试过卸载和重新安装Eclipse C.D.T、Eclipse整体、GCC和g++。我尝试在GCC命令或g++命令中添加-std=c++11和/或-std=c++99标志。我已经尝试在Eclipse中使用Linux GCC, Cross GCC和其他版本的GCC进行构建。

我正在运行Eclipse 3.8,在64位Linux Mint 16 Petra上安装了J.D.T.和C.D.T.包。

如果有人能帮我解决这个问题,"感激"不足以表达我对你的感激之情。

编辑:以下是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)

这是一个代码的示例代码有错误。请记住,我已经尝试添加其他当前未显示的#include,我有理由相信缺失的#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的函数和特性仍然被标记为带有红色下划线的错误,因此问题仍然没有完全解决。我所需要的只是有人告诉我如何让eclipse和/或NetBeans在其错误解析器中识别c++ 11特性。

对于您可能提供的任何帮助,我再次表示感谢。

尝试用

编译源代码
g++ -std=c++11 ...

根据to_string(),这是c++ 2011的一个特性。


在Eclipse Kepler中,您可以通过选择

来设置它。

Project>> Properties>> C/c++ Build>> Settings>> Tool Settings>> GCC c++ Compiler>> Dialect

和选择ISO C++11 (-std=c++0x)代替Language standard

C/C++ BuildConfiguration应该选择[All configurations]

最新更新