这是什么意思?


92

我有2节课:

class base {
    virtual void foo() {};
};

class derived : public base {
    void foo() { base::foo(); }
};

我犯了一个错误,base:foo();而不是写了base::foo();。该代码已编译并运行,但存在段错误。

我不知道该如何使用Google,也不知道它是什么,但是我很感兴趣:这是什么意思?

base:foo();

如果很重要:

class base : public QAbstractGraphicsShapeItem

32
这是一个标签
克里斯,2015年

20
这是打开警告的帮助,看到的情况下,它活 ... warning: label 'base' defined but not used [-Wunused-label]...也许我们需要添加此提出一个问题页面:你尝试过打开警告
沙菲克Yaghmour

6
以堆栈溢出结束。多么合适!
Laurent LA RIZZA 2015年

Answers:


125
void foo() { base:foo(); }

等效于:

void foo()
{
   base: // An unused label.
   foo(); // Calls the function again, resulting in infinite recursion.
}

由于无限递归,该函数导致堆栈溢出。


1
是的,当我foo()在调用堆栈中看到许多调用时,我发现了该错误。谢谢
railmisaka

在gcc / clang等中是否有针对此的警告?
不动声色

10
@Serthy,当我使用时-Wall,收到警告消息:socc.cc:3
R Sahu 2015年

10
@Serthy:为此,IIRC Visual Studio发出“在所有控制路径上递归”的警告。
MSalters 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.