簡體   English   中英

C ++類名稱空間怪異

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM