[英]C++ class namespace weirdness
我在OS X上有一個使用Core Audio結構的C ++類。我的最初實現是這樣的:
class MyClass
{
private:
AUNode _converterNode;
AURenderCallbackStruct _renderCBStruct;
public:
MyClass();
~MyClass();
inline AUNode* getConverterNode() { return &_converterNode; }
inline AURenderCallbackStruct* AURenderCallbackStruct() { return &_renderCBStruct; }
};
閱讀Poco樣式指南后,我想更改私有/公共塊的順序。 然后看起來像這樣:
class MyClass
{
public:
MyClass();
~MyClass();
inline AUNode* getConverterNode() { return &_converterNode; }
inline AURenderCallbackStruct* AURenderCallbackStruct() { return &_renderCBStruct; }
private:
AUNode _converterNode;
AURenderCallbackStruct _renderCBStruct;
};
現在,編譯器告訴我類型AURenderCallbackStruct
是未知的,並告訴我將類型名稱替換為::AURenderCallbackStruct
。 當我這樣做時,沒有編譯器錯誤。 奇怪的是,這僅出現在`AURenderCallbackStruct,而不是AUNode。
AURenderCallbackStruct的定義如下:
typedef struct AURenderCallbackStruct {
AURenderCallback inputProc;
void * inputProcRefCon;
} AURenderCallbackStruct;
AUNode的定義如下:
typedef SInt32 AUNode;
誰能解釋為什么更改private / public塊的順序會導致編譯器錯誤,以及為什么在類型前面添加::
時錯誤消失呢?
首先,不清楚為什么將成員函數命名為AURenderCallbackStruct,該成員函數與相應結構的名稱一致,並且看起來像結構構造函數。 問題是這個愚蠢的名字。
在第一種情況下,編譯器認為您確實定義了隱藏該結構的相應名稱的成員函數。 在第二種情況下,編譯器認為您試圖調用該結構的構造函數。
只需重命名不會產生歧義的函數即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.