warning: overloaded virtual function <> is only partially overridden in class <>
タイトルの上記のエラーは、オーバーロードとオーバーロードを同時に使用する場合に表示される警告情報です.
通常、overridingを使用する場合、親クラスの関数を呼び出さない確率が高い.
(ダイナミックバインド)
ただし、コンパイラでは、継承されたサブクラスに同じ名前の関数(上書き)がある場合、親クラスの関数は非表示になります.使用しない場合はコンパイルエラーは発生しませんが、警告が出力されます.
しかしMSVCのようなコンパイラではnvccを使用していると表示されない場合によく見られますcppファイルで参照されている場合(もちろん)、cuファイルで参照されている場合は、対応する警告が出力されます.
解決策はuseキーワードを使用してオーバーライド関数を宣言することです.
通常、overridingを使用する場合、親クラスの関数を呼び出さない確率が高い.
(ダイナミックバインド)
ただし、コンパイラでは、継承されたサブクラスに同じ名前の関数(上書き)がある場合、親クラスの関数は非表示になります.使用しない場合はコンパイルエラーは発生しませんが、警告が出力されます.
しかしMSVCのようなコンパイラではnvccを使用していると表示されない場合によく見られますcppファイルで参照されている場合(もちろん)、cuファイルで参照されている場合は、対応する警告が出力されます.
解決策はuseキーワードを使用してオーバーライド関数を宣言することです.
#include<iostream>
class A {
public:
virtual void process(int x) {
std::cout << "A1" << std::endl;
};
virtual void process(int a, float b) {
std::cout << "A2" << std::endl;
}
};
class B : public A {
public:
using A::process;
void process(int x) override{
std::cout << "B1" << std::endl;
}
};
class C :public B {
public:
using B::process;
void process(int a, float b) override {
std::cout << "C2" << std::endl;
}
};
int main(int argc, char *argv[]) {
A* ptr[3];
ptr[0] = new A;
ptr[1] = new B;
ptr[2] = new C;
for (int i = 0; i < 3; i++) {
ptr[i]->process(0);
ptr[i]->process(0, 0);
}
return 0;
}
Reference
この問題について(warning: overloaded virtual function <> is only partially overridden in class <>), 我々は、より多くの情報をここで見つけました https://velog.io/@springkim/warning-overloaded-virtual-function-is-only-partially-overridden-in-classテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol