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