未解决的外部符号" std :: atomic_fetch_add"

时间:2017-06-14 13:41:32

标签: c++ atomic

考虑这个简单的代码:

#include <iostream>
#include <atomic>

void add(std::atomic<double> & a, double c)
{
    std::atomic_fetch_add(&a, c);
}

int main()
{
    std::atomic<double> a;

    a.store(0);
    std::cout << a.load() << std::endl;

    add(a, 5.0);
    std::cout << a.load() << std::endl;

    std::cin.get();
}

编译它将导致:

  

错误LNK2019:未解析的外部符号&#34; double __cdecl std :: atomic_fetch_add(struct std :: atomic *,double)&#34;在函数&#34; void __cdecl add(struct std :: atomic&amp;,double)&#34;中引用了(?? $ atomic_fetch_add @ N @ std @@ YANPAU?$ atomic @ N @ 0 @ N @ Z) (?添加@@ YAXAAU?$原子@ N @ @@ STDÑ@ Z)

根据thisatomic_fetch_add中定义了<atomic>,所以发生了什么?

1 个答案:

答案 0 :(得分:1)

documentation中所述:

  

标准库提供以下类型的std :: atomic模板的特化:

double不在列表中。非成员函数也有注释:

  

所有成员都有非成员函数模板等价物   std :: atomic的函数。那些非会员职能可能是   另外为非特化的类型重载   std :: atomic,但能够保证原子性。 唯一这样的类型   在标准库中是std :: shared_ptr

因此不支持double