diesen einfachen Code Bedenken Sie:nicht aufgelöstes externes Symbol "std :: atomic_fetch_add"
#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();
}
Kompilieren es bewirkt:
Fehler LNK2019: nicht aufgelöstes externes Symbol „double __cdecl std :: atomic_fetch_add (struct std :: atomic *, double) "(?? $ atomic_fetch_add @ N @ std @@ YANPAU? $ atomar @ N @ 0 @ N @ Z) referenziert in der Funktion" void __cdecl add (Struktur std :: atomic &, double) "(? addiere @@ YAXAAU? $ atomar @ N @ std @@ N @ Z)
Nach this, atomic_fetch_add
ist in <atomic>
definiert, was passiert also?
Wer hat dir gesagt, dass 'std :: atomic' auf' double' spezialisiert ist? – Slava
Es ist, aber [keine der Überladungen nehmen ein Double] (http://en.cppreference.com/w/cpp/atomic/atomic_fetch_add) – Borgleader
@Slava Ich habe nirgendwo gesehen, dass ich es nicht verwenden kann 'doppelt'! – Jaber