为什么我会收到"variable 'std::packaged_task<int> task' has initializer but incomplete type"错误

Why do I get an "variable 'std::packaged_task<int> task' has initializer but incomplete type" error

本文关键字:task has gt int initializer but 错误 type incomplete lt std      更新时间:2023-10-16

我有以下代码,它给出了标题中提到的错误。 它是此处提供的示例的精简版本:

CPP 首选项

#include <thread>
#include <future>
int main()
{
    std::packaged_task<int()> task([] {return 1;});
    return 0;
}

但是,认为正如我在这里的另一个答案中指定的那样,将包任务的类型指定为 int(),那么它会正确解决,但事实并非如此。

谁能发现我做错了什么?

尝试:

g++ -E x.cpp > output.txt

它将运行预处理器,以便您可以看到编译器正在获取的内容。

如果我从 cygwin 运行它,输出中只存在 std::packaged_task 的预先声明,而不是定义。future文件包含以下预处理器条件:

#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) 
  && defined(_GLIBCXX_ATOMIC_BUILTINS_4)

在我的 Cygwin 安装中,宏_GLIBCXX_HAS_GTHREADS没有定义,因此#if中的所有内容都被删除了。也许同样的事情也会发生在你身上。

相关文章: