无法使用std :: atomic <int>作为类成员进行编译

时间:2019-01-15 21:21:10

标签: c++ compiler-errors static g++ atomic

我写了一个类,其中我想要一个原子整数,应将其最初设置为-1。

blue

自从我将匹配设置为#ifndef MIGRATINGTHREADS_VERTEX_H #define MIGRATINGTHREADS_VERTEX_H #include <set> #include <atomic> using namespace std; class vertex{ public: vertex(){}; int id; bool visited = false; std::set <int> adjacencyList; private: static std::atomic<int> matched{-1}; }; #endif 以来,我显然需要对其进行初始化,如图所示。但是,当我尝试使用static进行编译时,出现以下错误:

g++ -std=c++14 -latomic

另外,如果我尝试以这种方式进行初始化

/tmp/ccRJwQzu.o:(.data+0x0): multiple definition of `vertex::matched'
/tmp/ccp52lOu.o:(.data+0x0): first defined here
collect2: error: ld returned 1 exit status

我遇到以下与原子构造函数有关的错误

class vertex{
public:
    vertex(){};
    int id;
    bool visited = false;
    std::set <int> adjacencyList;

private:
    static std::atomic<int> matched;
};

在这里我只有一个匹配的定义,但是编译器认为这里有多个定义。这是原子作为类成员的问题,还是我的初始化问题?

0 个答案:

没有答案