rdt2017

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

 

分类:

技术点:

相关文章:

  • 2021-11-19
  • 2022-01-13
  • 2021-06-15
  • 2021-10-03
  • 2021-11-05
  • 2021-04-02
  • 2021-10-20
  • 2021-08-03
猜你喜欢
  • 2020-12-20
  • 2021-05-29
  • 2021-10-03
  • 2021-05-19
  • 2021-08-06
  • 2021-12-03
  • 2021-12-15
相关资源
相似解决方案