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

C++11 - Thread was not delcared in this scope error
KI
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 9 lat
  • 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:około 11 lat
  • Ostatnio:około 5 lat
  • 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


Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany
edytowany 1x, ostatnio: Niikelion
Azarien
nie, problemem jest po prostu brak std::thread.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:5 minut
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
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:minuta
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).


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22
kaczus
  • Rejestracja:około 10 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Łódź
  • Postów:1402
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++.


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie
satirev
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 lata
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.

edytowany 1x, ostatnio: satirev
vpiotr
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
0

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

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 minuty
  • 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


MarekR22
1. on ma błąd budowania, wiec brak join nic nie zmienia. 2. Qt ma własną implementację wątków, a tu się rozchodzi o STL. 3. @Satirev trafił w sedno.
kq
1. Dlatego nie odpowiadałem na pytanie, na które została już udzielona odpowiedź. 2. MinGW dołączane do oficjalnych paczek Qt dla MinGW ma obsługę nagłówka &lt;thread&gt;, o QThread nigdzie nie pisałem.
MarekR22
popatrz jaki ma błąd. Nagłówek ma! Problem jest brak implementacji thread. To wynika, z tego, że MinGW jest portem GCC do Windows, więc nagłówek jest przygotowany, ale niekompletny.
kq
Nie masz racji, staraj się nie pisać tak pochopnie. http://i.imgur.com/gGQtmMu.png
KI
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 9 lat
  • 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.