【问题标题】:Calling non-static method directly直接调用非静态方法
【发布时间】:2014-06-16 16:53:08
【问题描述】:

我正在做一个项目,我遇到了一些奇怪的代码,我无法理解为什么会发生这种情况以及如何发生!

我有一个类 Foo 和 Baz,而 Foo 有一个从 Baz 类调用而不实例化 Foo 的非静态方法:

class Foo {
    public:
       void qux(int a, int b);
};


class Baz {
    public:
        void bar(void);
};


void Baz::bar(void){
    Foo::qux(2,3);          // This should not happen as qux is not a static method !!
}

【问题讨论】:

  • 您确定这是实际代码吗?也许 baz 继承自 foo?

标签: c++ methods static call


【解决方案1】:

唯一可行的方法是,如果Baz 在某种程度上是从Foo 派生的。

当然,Foo 在该范围内具有不同的含义(通过 using、typedef、define 或其他方式)。

如果两者都不适用,则说明您的编译器已严重损坏。

【讨论】:

  • 没错,Baz 继承了 Foo .. 感谢您的提示 :)
【解决方案2】:

这可能发生在Baz 继承自Foo 的情况下。

在这种情况下,您可以直接以您提到的形式调用基类的方法:

void Baz::bar(void){
    Foo::qux(2,3);
}

【讨论】:

  • 没错,Baz 继承了 Foo .. 感谢您的提示 :)
猜你喜欢
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
相关资源
最近更新 更多