std::原子错误:没有为后缀“++”声明“operator++(int)”[-fpermissive]

问题描述 投票:0回答:2

我试图通过不同的线程更新

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)”[-fpermissive]

c++ c++11 constants stdatomic
2个回答
5
投票

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

根据您的意图,您可以使

fn_write()
成为非常量:

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

或者,您可以将

done
设为
mutable
:

mutable std::atomic<int> done;

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

0
投票

我刚刚使用 gcc 遇到了这个错误,就我而言,这是因为我忘记了:

#include <atomic>
© www.soinside.com 2019 - 2024. All rights reserved.