C++ 为什么在另一个函数中编译函数声明,它做什么?

C++ 为什么在另一个函数中编译函数声明,它做什么?,c++,visual-c++,C++,Visual C++,我打算调用私有类成员函数,但由于复制和粘贴错误,在头文件中声明了该函数时粘贴了该行: void DebugView::on_cbYAxisEnabled_stateChanged(int) { void updateAxisEnabled(); } 而不是 void DebugView::on_cbYAxisEnabled_stateChanged(int) { updateAxisEnabled(); } 令人惊讶的是,代码被编译并执行了。但是,没有执行方法updateAx

我打算调用私有类成员函数,但由于复制和粘贴错误,在头文件中声明了该函数时粘贴了该行:

void DebugView::on_cbYAxisEnabled_stateChanged(int)
{
    void updateAxisEnabled();
}
而不是

void DebugView::on_cbYAxisEnabled_stateChanged(int)
{
    updateAxisEnabled();
}
令人惊讶的是,代码被编译并执行了。但是,没有执行方法
updateAxisEnabled()

那么,它为什么要编译呢?这里是一个在方法体中声明的局部函数,还是
void
指示编译器忽略后面的内容

编译器是VisualStudio2008


S.:我知道函数中的类声明/定义,但不是C++中函数内的函数。

<代码>空格UpDATEXAISISABEDABLE();代码>是一个函数声明

样本:

#include <cstdio>

void a();
void b();

int main(void) {
    a();
    b();
    return 0;
}

void a() {
    void c(); // Declaration
    c(); // Call it
}

void b() {
    c(); // Error: not declared
}

void c() {
    puts("Hello, world!");
}
#包括
使a()无效;
无效b();
内部主(空){
a();
b();
返回0;
}
作废{
void c();//声明
c();//调用它
}
无效b(){
c();//错误:未声明
}
void c(){
放置(“你好,世界!”);
}

完全可以在函数范围内声明函数:函数可以在任何范围内声明

< C++程序员之间的一个常见错误确实是:

void foo()
{
    MyObject bar(); // 1
    bar.someMethod(); // 2
}

这将导致编译失败,因为第1行没有声明名为
bar
MyObject
并显式调用其构造函数;相反,它声明了一个名为
bar
的函数,该函数返回一个
MyObject
。因此,没有任何对象可以调用<代码> SOMMEDUD< <代码> > ./P> <代码> P.S:我知道函数中的类声明/定义,但在C++ C++代码中的功能不是很好,现在您也知道这是可能的。那么,在不能为局部函数定义实体的情况下对其进行DELCARE有什么意义呢?@ValentinHeinitz您是否尝试过使用g++作为示例,我很好奇这将如何工作;告诉编译器符号的定义存在于其他地方。@RichardRublev:是的,似乎有效,在这里尝试过:酷!它起作用了。我在这里试过:。很高兴知道,可以在成员函数中进行前向声明。谢谢这就是为什么我喜欢使用这种语法来初始化变量:
myobjectbar{}@是的,统一初始化可以解决这个问题,因为C++11。但是,请注意,除非您将非成员函数作为朋友,否则不能在类范围内声明它。@Brian:它的语法是什么?@Brian!甚至可以在类声明范围内定义一个全局not成员函数。似乎是另一种情况::-)