首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么` `std::cout << std::this_thread::get_id()‘不编译?

为什么` `std::cout << std::this_thread::get_id()‘不编译?
EN

Stack Overflow用户
提问于 2022-06-07 11:42:13
回答 1查看 128关注 0票数 1

为什么std::cout没有在这个代码段中编译,

代码语言:javascript
运行
复制
#include<future>
#include<iostream>
#include<array>
#include<algorithm>

std::array<int, 100> arr;
int sum=0;

struct Wrapper
{   
    void consume()
    {
        std::cout << std::this_thread::get_id() << std::endl;
        std::for_each(arr.begin(), arr.end(), [&sum](int val) {sum+=val; });
        std::cout << sum << std::endl;
    }

    bool produce()
    {
        std::cout << std::this_thread::get_id() << std::endl;

        auto temp = { 1,0,3 };
        return true;
    }
};


int main()
{
    std::fill(arr.begin(), arr.end(), 1);

    std::cout << std::this_thread::get_id() << std::endl;

    Wrapper wrap;
    std::future<bool> fut = std::async(std::launch::async, &Wrapper::produce, &wrap);

    if (fut.get())
        std::async(std::launch::async, &Wrapper::consume, &wrap).get();

}

而它在另一个类似的代码段中编译

代码语言:javascript
运行
复制
#include <iostream>
#include <thread>

void dosomework()
{
    std::cout << std::this_thread::get_id() << std::endl;
}

int main()
{
    for (int i = 0; i < 10; ++i){
        std::thread connectthread([](){
            dosomework();
        });
        std::cout << "connectthread:" << connectthread.get_id() << std::endl;
        connectthread.join(); 
    }
    return 0;
}

下面是编译器为前一个代码片段所包含的内容:

代码语言:javascript
运行
复制
<source>: In member function 'void Wrapper::consume()':
<source>:14:53: warning: capture of variable 'sum' with non-automatic storage duration
   14 |             std::for_each(arr.begin(), arr.end(), [&sum](int val) {sum+=val; });
      |                                                     ^~~
<source>:7:9: note: 'int sum' declared here
    7 |     int sum=0;
      |         ^~~
/opt/compiler-explorer/gcc-12.1.0/bin/../lib/gcc/x86_64-linux-gnu/12.1.0/../../../../x86_64-linux-gnu/bin/ld: /tmp/cck5848f.o: in function `main':
<source>:32: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::thread::id)'
/opt/compiler-explorer/gcc-12.1.0/bin/../lib/gcc/x86_64-linux-gnu/12.1.0/../../../../x86_64-linux-gnu/bin/ld: /tmp/cck5848f.o: in function `Wrapper::consume()':
<source>:13: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::thread::id)'
/opt/compiler-explorer/gcc-12.1.0/bin/../lib/gcc/x86_64-linux-gnu/12.1.0/../../../../x86_64-linux-gnu/bin/ld: /tmp/cck5848f.o: in function `Wrapper::produce()':
<source>:20: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::thread::id)'
collect2: error: ld returned 1 exit status

更新的:真令人惊讶,它在这个在线编译器上编译。

EN

回答 1

Stack Overflow用户

发布于 2022-06-07 11:42:39

它需要#include <thread>它编译

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72530609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档