繁体   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