web-dev-qa-db-ja.com

プロトC ++実装-「「オーバーライド」とマークされていますが、オーバーライドされません」エラー

// api_internal.proto
service InvoiceTemplateMatcher {
   rpc Process(InvoiceFilePath) returns (UploadStatus) {}
}

message InvoiceFilePath {
   string invoice_id = 1;
   string file_path = 2;
}

// template_matcher/src/main.cc
class OrkaEngineInvoiceTemplateMatcherImpl final : public InvoiceTemplateMatcher::Service {
private:
    Status Process(
        ServerContext* context,
        orka_engine_internal::InvoiceFilePath* invoicefp,
        orka_engine_internal::UploadStatus* response) override {
    // do stuff
    }
};

クラスInvoiceTemplateMatcher::Serviceは、コンパイル時にその.protoファイルから生成されます。

コンパイルしようとすると、エラーが発生する

‘grpc::Status OrkaEngineInvoiceTemplateMatcherImpl::Process(grpc::ServerContext*, orka_engine_internal::InvoiceFilePath*, orka_engine_internal::UploadStatus*)’ marked ‘override’, but does not override
     Status Process(ServerContext* context, orka_engine_internal::InvoiceFilePath* invoicefp, orka_engine_internal::UploadStatus* response) override {

私の知る限り、私のコードは ルートガイドの例 と同じ方法で記述されています。何が欠けていますか?

4
julka

私はこの投稿がかなり古いことを知っていますが、protobufで作業しているときにその人が遭遇する可能性のある将来のトラブルシューティングについては、正しい答えを提供します。

クラスの実装は自動的に生成され、protobuf c ++の生成にはデフォルトでこのクラス関数が含まれているというのは正しいことです。

virtual ::grpc::Status Process(::grpc::ServerContext* context, const ::orka_engine_internal::InvoiceFilePath* request, ::orka_engine_internal::UploadStatus* response);

したがって、関数を仮想関数に正確に一致させる必要があります。あなたの例では、単にinvoicefprequestに変更します

0
aikhs