直接上代码:
// outside.h
class Outside
{
private:
class Inner
{
public:
Inner(Outside& out)
: out_(out) {}
Outside& out_;
};
public:
void Inner() {;}
void Do();
}; // outside.cpp
void Outside::Do()
{
Outside::Inner in(*this);
}
可见,Outside的成员函数Inner,其名字等同于Outside的嵌套类Inner的名字。
在Outside::Do函数中构造嵌套类Inner对象in,编译时会发生错误:syntax error : missing ';' before identifier 'in'。
简单一点的情况可以是这样:
// main.cpp
class A
{}; void A()
{;} int main()
{
A a;
return ;
}
编译器也会报错称少了分号。
这种情况,最好不要让一个函数名和一个类名相同(构造函数除外),因为编译器认不出类了,但却只说少了分号,而且这种错误在大段代码中很不容易找出来。
或者这样修改,加个class在前面:
// outside.cpp
void Outside::Do()
{
class Inner in(*this);
} // main.cpp
int main
{
class A a;
return ;
}