Windows下用MinGW编译C++异步程序报错,请求排查问题原因
解决MinGW编译std::async代码时的"incomplete type"错误
问题代码
#include <iostream> #include <future> bool is_prime (int x) { std::cout << "Calculating. Please, wait...\n"; for (int i=2; i<x; ++i) if (x%i==0) return false; return true; } int main () { std::future<bool> fut = std::async (is_prime,313222313); std::cout << "Checking whether 313222313 is prime.\n"; bool ret = fut.get(); if (ret) std::cout << "It is prime!\n"; else std::cout << "It is not prime!\n"; return 0; }
编译错误信息
15:21: error: variable 'std::future
fut' has initializer but incomplete type
15 | std::futurefut = std::async (is_prime,313222313);
问题原因
你使用的MinGW GCC 9.2.0版本中,<future>头文件的实现依赖线程库,但MinGW默认不会自动链接该库。这导致编译器无法获取std::future的完整定义,从而抛出"incomplete type"错误。
解决办法
编译代码时添加-pthread选项,强制编译器链接POSIX线程库。示例编译命令:
g++ your_code.cpp -o prime_checker -pthread
内容的提问来源于stack exchange,提问作者hr.mousavi
相关产品推荐
相关产品推荐

