C++11 - Thread was not delcared in this scope error

C++11 - Thread was not delcared in this scope error
KI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 29
0

Mam taki program:

Kopiuj
#include <iostream>
#include <thread>
using namespace std;

void function1(){
    cout << "DZIALAM!!!!!" << endl;
}

int main(){
    thread t1(function1);
    return 0;
} 

I dostaje taki błąd:
"||=== ewghm, Debug ===|
C:\Documents and Settings\KM\Pulpit\PROGRAMY\ewghm\main.cpp||In function 'int main()':|
C:\Documents and Settings\KM\Pulpit\PROGRAMY\ewghm\main.cpp|10|error: 'thread' was not declared in this scope|
C:\Documents and Settings\KM\Pulpit\PROGRAMY\ewghm\main.cpp|10|error: expected ';' before 't1'|
== Build finished: 2 errors, 0 warnings (0 minutes, 0 seconds) ===| "

W CodeBlocks w ustawieniach kompilatora mam ustawione: "Have g++ follow the C++11 ISO C++ language standard [-std=c++11]"

Korzystam dużo z C++11 i to jest pierwsza rzecz, która mi nie działa. Wiek tos jak sobie z tym poradzić?

Mój system to Windows XP, kompilator to: GNU GCC.

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
0

z tego co widzę to albo źle dodajesz bibliotekę thread(bo nie widzi ci klasy) albo brakuje ci std:: co nie powinno być błędem bo masz using namespace std... ew nie dodałeś flagi do linkera, to się często zdaża

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

Niestety, ja mam MinGW GCC 4.8.1 i też brakuje w nim std::thread.

Możesz użyć biblioteki Boost.

Kopiuj
#include <iostream>
#include <boost/thread.hpp>
using namespace std;
 
void function1(){
    cout << "DZIALAM!!!!!" << endl;
}
 
int main(){
    boost::thread t1(function1);
    return 0;
} 

Weź też pod uwagę że kod jest nieprawidłowy: funkcja main zakończy się zanim odpali twój wątek i wyświetli cokolwiek.

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
0

Sam kod działa (po małej poprawce): http://melpon.org/wandbox/permlink/jk1wz1FrQehKDQBK (pod 4.8.1 też działa)
Jakiego kompilatora używasz (wersja)?
Jak to budujesz, może używasz złych ustawień kompilatora?
Może masz wyłączone wsparcie dla wątków (jest taka flaga).

kaczus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 1403
0

To o czym pisalem, może sie okazac, że w wielu systemach nie bedzie pelnej implementacji c++11 właśnie ze względu na te różne thready, bo api systemu może działać trochę inaczej niż wymyslili to twórcy standardu, a c++ nie ma pod sobą tak jak java subsystemu, tylko działa natywnie odwołując się do systemu i w tym jest siła c++.

satirev
  • Rejestracja: dni
  • Ostatnio: dni
1

mingw nie ma jeszcze wątków. Możesz za to użyć tego: https://github.com/meganz/mingw-std-threads albo jakiejś wersji mingw-w64, która zawiera wątki.
Kolejne możliwości to boost::thread albo po prostu pthread.

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
0

std::thread jest dostępne w TDM GCC (z tego co pisze autor): http://tdm-gcc.tdragon.net/quirks

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

MinGW dołączane do Qt też ma wątki.

Sam kod jest poprawny, ale ponieważ nie czekasz na zakończenie wątku, destruktor t1 ma prawo wywołać std::terminate

KI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 29
0

Dzieki za odpowiedzi. Odpaliłem to w Qt bo CodeBlocksa nie mogę ogarnąć...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.