реализация proto c ++ - ошибка с пометкой 'override', но не override ' - PullRequest
3 голосов
/ 08 апреля 2019
// 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 {

НасколькоЯ могу сказать, что мой код написан так же, как в Route Guide пример .Чего мне не хватает?

1 Ответ

1 голос
/ 08 апреля 2019

Такая ошибка выдается компилятором, когда функция не помечена virtual в базовом классе.

Рассмотрим следующий минимальный пример:

class Base{
    void Foo() {}
};

class Derived : Base{
    void Foo() override {}
};

Компилятор выдает ошибку:

error: 'void Derived::Foo()' marked 'override', but does not override
     void Foo() override {}

См. Демо

Спецификатор override указывает, что функция virtual переопределяет другую функцию virtual.

...