std :: atomic error:没有'operator ++(int)'声明为postfix'++'[-fpermissive]

时间:2018-01-31 02:21:14

标签: c++ c++11 const stdatomic

我正在尝试通过不同的线程更新atomic变量并收到此错误。 这是我的代码。

class counter {
    public:
    std::atomic<int> done;

    bool fn_write (int size) const {
        static int count = 0;
        if (count == size) {
            done++;
            count = 0;
            return false;
        } else {
            count++;
            return true;
        }
    }
};

int main() {
    counter c1;
    for (int i=0; i<50; i++) {
        while (! c1.fn_write(10)) ;
    }
}

我在第8行done++收到以下错误。

  

错误:没有'operator ++(int)'声明为postfix'++'[-fpermissive]

1 个答案:

答案 0 :(得分:4)

fn_write()被声明为const成员函数,其中done数据成员无法修改。

根据您的意图,您可以将fn_write()设为非const:

bool fn_write (int size) {
    ... ...
}

或者,您可以将done设为mutable

mutable std::atomic<int> done;

bool fn_write (int size) const {
    ... ...
}