2012-06-13 20 views
5

Mam dość dziwne błędy podczas kompilowania kodu pod gcc. Mówi mi, że std::function nie istnieje.Funkcja nie jest elementem std

mogę odtworzyć ten błąd z następującego kodu:

#include <functional> 
#include <stdio.h> 

void test(){ printf ("test"); } 

int main() { 
    std::function<void()> f; 
    f = test; 
    f(); 
} 

Jeśli uruchomić gcc (od Cygwin). (Mój komunikat o błędzie był Niemcem, więc to tłumaczone Może to być dźwięk różni się w języku angielskim gcc)

$ gcc test.cpp 
test.cpp: in function "int main(): 
test.cpp:7:3: Error: "function" is not an element of "std"« 
test.cpp:7:25: Error: "f" was not defined in this scope 

Z MSVC skompilowano pomyślnie. Proszę powiedz mi, co robię źle w moim kodzie.

Johannes

+1

Czy kompilujesz z C++ 11? – chris

+0

Nie, jeśli zrobię "gcc -std = C++ 0x test.cpp" to wyśle ​​kilka błędów łącznika, których nie rozumiem. – EGOrecords

+0

Potrzebujesz 'g ++', a nie 'gcc', zobacz odpowiedzi poniżej. – juanchopanza

Odpowiedz

13

przełożony jako:

g++ test.cpp -std=c++0x 

-std=c++0x jest potrzebna, ponieważ używasz C++ 11 funkcje, poza g++ test.cpp wystarczy.

Upewnij się, że masz najnowszą wersję GCC. Można sprawdzić wersję jako:

g++ --version 
+1

"Jeśli używasz gcc test.cpp, to zakłada program C!" Nie prawda. gcc wyświetla język z rozszerzenia pliku. Jeśli założy program C, komunikat o błędzie będzie zupełnie inny. 'std :: function' byłoby błędem składni w C. Nie wygenerowałoby to komunikatu o' funkcji' nieistniejącej w przestrzeni nazw 'std'. Prawdą jest, że 'gcc' (w przeciwieństwie do' g ++ ') nie łączy automatycznie ze standardową biblioteką C++, więc otrzymasz błędy linkera, jeśli nie określisz odpowiedniej flagi -l ręcznie. – sepp2k

3

potrzeby kompilacji w trybie C++, aw trybie C++11. Musisz więc ustawić flagę g++ i -std na c++0x.

g ++ test.cpp -std = C++ 0x

Można również użyć -std=c++11 gcc od 4,7 roku.

Powiązane problemy