Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 直接调用非静态方法_C++_Methods_Static_Call - Fatal编程技术网

C++ 直接调用非静态方法

C++ 直接调用非静态方法,c++,methods,static,call,C++,Methods,Static,Call,我正在从事一个项目,我面临着一个有点奇怪的代码,我无法理解为什么会发生这种情况,以及如何发生这种情况 我有一个类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);

我正在从事一个项目,我面临着一个有点奇怪的代码,我无法理解为什么会发生这种情况,以及如何发生这种情况

我有一个类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
在某种程度上派生出来的

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


如果两者都不适用,则编译器将严重损坏。

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

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


如果两者都不适用,则编译器严重损坏。

如果
Baz
继承自
Foo
,则可能发生这种情况

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

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

如果从
Foo
继承了
Baz
,则可能发生这种情况

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

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

你确定那是实际代码吗?也许baz是从foo继承的?你确定那是真正的代码吗?也许baz继承了foo?没错baz继承了foo。。谢谢你的提示:)没错,Baz继承了Foo。。谢谢你的提示:)没错,Baz继承了Foo。。谢谢你的提示:)没错,Baz继承了Foo。。谢谢你的提示:)