c++,函数名不要和某个类名相同 (syntax error : missing ';' before identifier....)
直接上代码:
// 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 0; }
编译器也会报错称少了分号。
这种情况,最好不要让一个函数名和一个类名相同(构造函数除外),因为编译器认不出类了,但却只说少了分号,而且这种错误在大段代码中很不容易找出来。
或者这样修改,加个class在前面:
// outside.cpp void Outside::Do() { class Inner in(*this); } // main.cpp int main { class A a; return 0; }
浙公网安备 33010602011771号