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;      
}

 

posted on 2017-06-06 01:20  .rdt  阅读(404)  评论(0)    收藏  举报

导航