Eclipse CDT не может распознать стандартные функции или «NULL»

1

У меня была эта проблема в течение нескольких недель и я не смог найти решение.

При попытке использовать Eclipse или пытаться скомпилировать с помощью простого GCC или g++ через терминал, существует ряд стандартных функций (плюс переменная "NULL" ), которые не распознаются, включая метод to_string.

Я попытался добавить много разных заголовков в программу, пытаясь найти правильные файлы, но безрезультатно. Я пробовал #including <string>, <stdio.h>, <stddef.h>, <cstdlib> и почти любой другой стандартный заголовок, который я мог найти в сообщениях форума, которые могут содержать функцию to_String. Я даже пробовал все эти #includes с AND без расширения .h. Тем не менее, неважно, что я пробовал, to_string и NULL не были распознаны (среди других методов).

Я прошел через многие форумы и многие сообщения на форуме и попробовал множество решений, в том числе этот, этот, этот, этот, этот и т.д. Тем не менее, я не нашел решения.

Я попытался удалить и переустановить Eclipse C.D.T., Eclipse в целом, GCC и g++. Я попытался добавить команды -std = С++ 11 и/или -std = С++ 99 в команду GCC или команду g++. Я попытался построить в Eclipse Linux GCC, Cross GCC и другие версии GCC.

Я запускаю Eclipse 3.8 как с J.D.T. и C.D.T. пакетов, установленных на 64-битной Linux Mint 16 Petra.

Если кто-нибудь может помочь мне решить эту проблему, "благодарная" не выразит должным образом мою благодарность вам.

EDIT: Вот результат 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;
    }

};

EDIT: Ниже приведено краткое описание комментариев, что мы определили, что причина в том, что Eclipse не распознает стандартные функции и ключевые слова С++ 11. Я установил NetBeans в своей системе с помощью своего плагина C/С++ и возникли те же самые ошибки. Я не могу заставить NetBeans или Eclipse распознавать функции С++ 11, несмотря на добавление флага -std=c++11 в нескольких местах в конфигурациях проекта.

Как сейчас, Eclipse может, наконец, скомпилировать, не выдавая ошибок С++ 11; однако в окне кода функции и функции С++ 11 по-прежнему отмечены как ошибки с красным подчеркиванием, поэтому проблема все еще не полностью решена. Все, что мне нужно, это сообщить кому-то, как заставить Eclispe и/или NetBeans распознавать функции С++ 11 в своих анализаторах ошибок.

Еще раз спасибо за любую помощь, которую вы можете предоставить.

  • 0
    Можете ли вы поделиться версией вашего gcc (gcc -v).
  • 0
    Пожалуйста, включите пример исходного файла, который может быть использован для воспроизведения вашей проблемы в вашем посте.
Показать ещё 5 комментариев
Теги:
gcc
null

1 ответ

1

Попробуйте скомпилировать исходный код с помощью

g++ -std=c++11 ...

Согласно to_string(), это функция С++ 2011.


В Eclipse Kepler вы можете установить это, выбрав

Проект → Свойства → C/С++ Build → Настройки → Настройки инструмента → Компилятор GCC С++ → Диалект

и выбрав ISO C++11 (-std=c++0x) для Language standard.

И вы должны выбрать [All configurations] для Configuration в C/C++ Build.

  • 0
    Я делал это раньше, но попробовал еще раз, чтобы убедиться. Трудно сказать, работало ли это в терминале, но Eclispe по-прежнему вызывает ошибку to_String, утверждая, что «функция to_string 'не может быть решена».
  • 0
    @REALDrummer Какие параметры g++ предоставлены вашим Eclipse?
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню