【问题标题】:Remote Call Framework and pure virtual method somewhere远程调用框架和纯虚拟方法
【发布时间】:2014-10-03 04:36:00
【问题描述】:

我正在使用 RCF (http://www.deltavsoft.com/RCF.html) + protobuf (https://code.google.com/p/protobuf/) 进行远程函数调用(嵌入式 linux 服务器 + windows 客户端)。 我的问题与 windows 客户端有关。

我在客户端使用 MinGW 和 Qt 5.3.1,但我不能使用 QtCreator:如果将 RCF 源代码添加到 INCLUDEPATH,它会不断失败。看起来这是已知问题,但尚未解决: https://bugreports.qt-project.org/browse/QTCREATORBUG-12890?page=com.googlecode.jira-suite-utilities:transitions-summary-tabpanel

有一段时间,我正在使用 notepad++ 和命令行编译。所以,更重要的是:RCF 有两种方式来执行远程调用——同步和异步。 Syncronous 目前还可以。异步是可以的......除了一种情况。

我有很多绑定回调的函数:

void p347ClientWrapper::onAsyncFunctionCompleted(RCF::Future<int> fRet, int if_code) {
     //code here is no matter
}

绑定,根据 RCF 示例:

RCF::Future<int> fRet;
fRet = client->anyOfMyFunctions(
    RCF::AsyncTwoway( boost::bind(&p347ClientWrapper::onAsyncFunctionCompleted, this, fRet, if_code) ), 
    any_parameter_of_my_function);

“客户端”是 RcfClient

大部分功能运行正常。但其中一个(看起来和其他人一样)导致

pure virtual method called
terminate called without an active exception

它发生在回调附近的某个地方(我猜想),因为这个调用是在服务器端正常处理的。我想,这个“纯虚拟”隐藏在 RCF 类的某个地方。不幸的是,我找不到方法,如何调查此案……

更新:

突然找到了治疗方法,但还是不完全明白原因。

让我们看看RCF定义:

RCF_METHOD_R1(int,doStartRotChannel_fixed,const channel_manager::RotChannelInitParams &)

效果很好

RCF_METHOD_R1(int,doStartRotChannel_orig,channel_manager::RotChannelInitParams &)

导致“调用纯虚方法”

所以,如果我将参数声明为 const ,它就可以工作。我不知道为什么,也许有人可以解释一下。

【问题讨论】:

    标签: c++ qt mingw protocol-buffers rcf


    【解决方案1】:

    来自 C++03 部分:13.1-3

    隐藏在参数类型中的 const 和 volatile 类型说明符 规范是重要的,可以用来区分 重载函数声明。

    const 定义中的类型说明符使其完全成为编译器的另一个重载函数,并且在这种情况下未实现假定的虚拟方法。

    【讨论】:

      猜你喜欢
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 2012-02-12
      • 1970-01-01
      • 2012-06-21
      相关资源
      最近更新 更多