web-dev-qa-db-fra.com

implémentation de proto c ++ - erreur "marqué" remplacer ", mais ne remplace pas"

// 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
    }
};

Classe InvoiceTemplateMatcher::Service est généré pendant la compilation à partir de ce .proto fichier.

Lorsque j'essaye de compiler, j'obtiens une erreur

‘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 {

Autant que je sache, mon code est écrit de la même manière que dans exemple Route Guide . Qu'est-ce que je rate?

4
julka

Je sais que ce message est assez ancien, mais je donnerai une réponse correcte pour tout dépannage futur que cette personne pourrait rencontrer lors de son travail avec des protobufs.

Vous avez raison de dire que l'implémentation de classe a été générée automatiquement et que la génération de protobuf c ++ a cette fonction de classe par défaut:

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

Vous devez donc faire correspondre exactement votre fonction à la fonction virtuelle. Dans votre exemple, changez simplement invoicefp en request

0
aikhs