C++ 更改typedef的含义
我的代码中有以下声明:C++ 更改typedef的含义,c++,typedef,C++,Typedef,我的代码中有以下声明: typedef QString String; 然后在另一个标题中,我会: class MyClass { typedef String String; }; 出现以下错误: error: changes meaning of 'String' from 'typedef class QString String' [-fpermissive] 使用此重新声明有什么问题?由于类型别名的工作方式,编译器认为您试图在
typedef QString String;
然后在另一个标题中,我会:
class MyClass {
typedef String String;
};
出现以下错误:
error: changes meaning of 'String' from 'typedef class QString String' [-fpermissive]
使用此重新声明有什么问题?由于类型别名的工作方式,编译器认为您试图在其内部定义
MyClass::String
。一切都变得混乱起来
[C++11:7.1.3/6]:
在给定范围内,不得使用typedef
说明符重新定义该范围内声明的任何类型的名称以引用其他类型。[……]
下面是一个完整的示例:
typedef int alias_t;
class T
{
typedef alias_t alias_t;
};
:
test.cpp:4:错误:“typedef alias\u t::alias\u t”的声明test.cpp:1:错误:将“alias_t”的含义从“typedef int alias_t”更改为
我可以通过向现有类型添加
:
前缀:
typedef int alias_t;
class T
{
typedef ::alias_t alias_t;
};
在您的代码中,这将转换为以下内容:
class MyClass
{
typedef ::String String;
};
我记得相关的std规则确保名称在类范围内只有一个含义;如果
MyClass
位于某个名称空间myNameSpace
?@bitmask定义“那个”。@LightnessRacesinOrbit:“那个”:=typedef::String
@bitmask我不明白为什么。前导::
相当于Linux/
,而不是Linux。/
。但是试试看!