[英]Does gcc 4.7.1 support threads?
我按照这里关于设置CodeBlocks的指令使用GCC 4.7.1。我提到的页面提供的样本编译得很好,但是当我尝试编译下面的代码时,它后来产生了错误。我必须说我甚至通过编译器设置(-std = c ++ 11)设置编译器C ++ 11标志,但仍然没有运气。 无法编译的代码:
#include <iostream>
#include <thread>
#include <vector>
//This function will be called from a thread
void func(int tid) {
std::cout << "Launched by thread " << tid << std::endl;
}
int main() {
std::vector<std::thread> th;
int nr_threads = 10;
//Launch a group of threads
for (int i = 0; i < nr_threads; ++i) {
th.push_back(std::thread(func,i));
}
//Join the threads with the main thread
for(auto &t : th){
t.join();
}
return 0;
}
错误:
main.cpp||In function 'int main()':|
main.cpp|13|error: 'thread' is not a member of 'std'|
main.cpp|13|error: 'thread' is not a member of 'std'|
main.cpp|13|error: template argument 1 is invalid|
main.cpp|13|error: template argument 2 is invalid|
main.cpp|13|error: invalid type in declaration before ';' token|
main.cpp|19|error: request for member 'push_back' in 'th', which is of non-class type 'int'|
main.cpp|19|error: 'thread' is not a member of 'std'|
main.cpp|23|error: no matching function for call to 'begin(int&)'|
main.cpp|23|note: candidates are:|
\include\c++\4.7.1\initializer_list|89|note: template<class _Tp> constexpr const _Tp* std::begin(std::initializer_list<_Tp>)|
\include\c++\4.7.1\initializer_list|89|note: template argument deduction/substitution failed:|
main.cpp|23|note: mismatched types 'std::initializer_list<_Tp>' and 'int'|
\include\c++\4.7.1\bits\range_access.h|87|note: template<class _Tp, unsigned int _Nm> _Tp* std::begin(_Tp (&)[_Nm])|
\include\c++\4.7.1\bits\range_access.h|87|note: template argument deduction/substitution failed:|
main.cpp|23|note: mismatched types '_Tp [_Nm]' and 'int'|
\include\c++\4.7.1\bits\range_access.h|58|note: template<class _Container> decltype (__cont.begin()) std::begin(const _Container&)|
\include\c++\4.7.1\bits\range_access.h|58|note: template argument deduction/substitution failed:|
main.cpp|23|required from here|
\include\c++\4.7.1\bits\range_access.h|58|error: request for member 'begin' in '__cont', which is of non-class type 'const int'|
\include\c++\4.7.1\bits\range_access.h|48|note: template<class _Container> decltype (__cont.begin()) std::begin(_Container&)|
\include\c++\4.7.1\bits\range_access.h|48|note: template argument deduction/substitution failed:|
main.cpp|23|required from here|
\include\c++\4.7.1\bits\range_access.h|48|error: request for member 'begin' in '__cont', which is of non-class type 'int'|
main.cpp|23|error: no matching function for call to 'end(int&)'|
main.cpp|23|note: candidates are:|
\include\c++\4.7.1\initializer_list|99|note: template<class _Tp> constexpr const _Tp* std::end(std::initializer_list<_Tp>)|
\include\c++\4.7.1\initializer_list|99|note: template argument deduction/substitution failed:|
main.cpp|23|note: mismatched types 'std::initializer_list<_Tp>' and 'int'|
\include\c++\4.7.1\bits\range_access.h|97|note: template<class _Tp, unsigned int _Nm> _Tp* std::end(_Tp (&)[_Nm])|
\include\c++\4.7.1\bits\range_access.h|97|note: template argument deduction/substitution failed:|
main.cpp|23|note: mismatched types '_Tp [_Nm]' and 'int'|
\include\c++\4.7.1\bits\range_access.h|78|note: template<class _Container> decltype (__cont.end()) std::end(const _Container&)|
\include\c++\4.7.1\bits\range_access.h|78|note: template argument deduction/substitution failed:|
main.cpp|23|required from here|
\include\c++\4.7.1\bits\range_access.h|78|error: request for member 'end' in '__cont', which is of non-class type 'const int'|
\include\c++\4.7.1\bits\range_access.h|68|note: template<class _Container> decltype (__cont.end()) std::end(_Container&)|
\include\c++\4.7.1\bits\range_access.h|68|note: template argument deduction/substitution failed:|
main.cpp|23|required from here|
\include\c++\4.7.1\bits\range_access.h|68|error: request for member 'end' in '__cont', which is of non-class type 'int'|
main.cpp|23|error: unable to deduce 'auto&' from '<expression error>'|
||=== Build finished: 14 errors, 4 warnings (0 minutes, 6 seconds) ===|
有了mingw,gcc的线程支持取决于你得到的构建。 有些构建不支持线程,有些构建不支持线程。
我相信http://code.google.com/p/mingw-builds/downloads/list上的mingw构建支持线程。
MinGW根本不会使用'-std = c ++ 0x'进行编译。 奇怪的是,' - std = gnu ++ 0x'有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.