for*_*818 5 c++ overloading declaration definition language-lawyer
我想知道,为什么不允许这样写:
struct foo {
void bar(); // declaration
void bar(){std::cout << "moo" << std::endl;} // declaration + definition
};
Run Code Online (Sandbox Code Playgroud)
该函数被声明两次(我认为这是可以的)并定义一次.但是,我的编译器抱怨:
decldef.cxx:7:10: error: 'void foo::bar()' cannot be overloaded
Run Code Online (Sandbox Code Playgroud)
为什么不允许?
为什么我的编译器(g ++ 4.7.2)将此解释为重载?
PS:我知道怎么写"正确的方式",但我只是想知道,为什么上面的错误.
Ric*_*ges 10
从§9.3开始
除了出现在类定义之外的成员函数定义之外,除了出现在类定义之外的类模板和成员函数模板(14.7)的成员函数的显式特化之外,不应重新声明成员函数.
此外,在这种情况下,陈述也可能违反:
可以在其类定义中定义成员函数(8.4),在这种情况下,它是内联成员函数 (7.1.2),或者如果它已经被声明但未在其定义中定义,则可以在其类定义之外定义它.类定义.
由于第一个声明没有声明函数inline
.第二个定义隐含着.
然而,反思的那个似乎不那么有说服力.
该函数被声明两次(我认为这是可以的)并定义一次.
这与您是否第二次定义函数无关.问题的关键是,你声明函数两次,这是不正常.
这也没有编译,具有相同的错误消息:
struct foo {
void bar();
void bar();
};
Run Code Online (Sandbox Code Playgroud)
您不能在类定义中使用相同的参数列表重新声明相同的函数:
'void foo::bar()' cannot be overloaded with 'void foo::bar()'.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
131 次 |
最近记录: |