У меня была эта проблема в течение нескольких недель и я не смог найти решение.
При попытке использовать 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 в своих анализаторах ошибок.
Еще раз спасибо за любую помощь, которую вы можете предоставить.
Попробуйте скомпилировать исходный код с помощью
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
.
g++
предоставлены вашим Eclipse?