2014-03-03 187 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