我有以下代码:
struct type1
{
struct type2
{
};
int tyep2; // No conflic with real type name path: type1::type2
};
struct type4
{
struct type5
{
};
static int type5; // No conflic with real type name path: type4::type5
};
int type4::type5; // this path name is equal to type name path: struct type4::type5
int _tmain(int argc, _TCHAR* argv[])
{
type1::type2 var1; // is ok
type4::type5 Var2; // is ok
type4::type5 = 0; // is ok, but the static variable has obscured my type
return 0;
}
我的问题是:
答案 0 :(得分:2)
由于名称含糊不清,你的程序格式不正确(忽略你散落的拼写错误的“tyep”)
§10.2会员名称查询
成员名称查找确定类范围(3.3.7)中名称(id-expression)的含义。名称 查找可能导致歧义,在这种情况下程序是不正确的。对于id-expression,名称 查询从此类的范围开始;对于qualified-id,名称查找从嵌套名称的范围开始 - 符。名称查找在访问控制之前进行(3.4,第11条)。
不要这样做:
struct type5
{
//...
};
static int type5;
不出所料,这不会为我在ideone上编译。 Live Demo
答案 1 :(得分:0)
1)t YE p5!= type5
2)同样的原因