2014-03-03 83 views
0

我有这样的代码:无法访问私有成员 - 原子

class Animator{ 
public: 


private: 
    bool    _running; 
    atomic<bool>   _waiting; 

}; 

Visual Studio中说Error 2 error C2248: 'std::atomic<bool>::operator =' : cannot access private member declared in class 'std::atomic<bool>' d:\programmierung\uncertainty\uncertainty\uncertainty\animator.h 113

我看不到这个类和最小类之间的区别只用原子作为一个会员,工作。

+0

提供了一个完整但最小的例子。我没有看到有问题的线路,而你的例子中充满了不相关的东西*。 –

回答

2

很可能最小测试类的赋值运算符根本就不会被使用,因此没有实例化。如果你明确地调用它的赋值操作符,你应该看到相同的错误。一个std :: atomic不支持赋值给另一个std :: atomic。

3

你错过了实例变量的初始化:

#include <atomic> 

class Animator 
{ 
public: 
    Animator(); 
private: 
    bool _running; 
    std::atomic<bool> _waiting; 
}; 

Animator::Animator() : _running(false), _waiting(false) { 
} 

std::atomic没有赋值运算符,但如果你使用默认的构造函数,但没有默认值,该运营商将被使用。

+0

隐式定义的构造函数会调用赋值运算符? Afaik它会调用默认的构造函数(可用)。 – heinrichj

+0

如果您省略了自己的默认构造函数,编译器将创建自己的构造函数,并且还会创建默认的赋值运算符。这导致了这个问题。 – Flovdis