首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程调用框架与纯虚拟方法

远程调用框架与纯虚拟方法
EN

Stack Overflow用户
提问于 2014-10-03 04:36:00
回答 1查看 304关注 0票数 0

我使用RCF (http://www.deltavsoft.com/RCF.html) + protobuf (https://code.google.com/p/protobuf/)进行远程函数调用(embedded + windows )。我的问题与windows客户端有关。

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

有一段时间,我使用notepad++和命令行编译。因此,更重要的是: RCF有两种执行远程调用的方法--同步调用和异步调用。同步现在还可以。同时代没事的..。除了一个案子。

我有许多函数绑定到回调:

代码语言:javascript
复制
void p347ClientWrapper::onAsyncFunctionCompleted(RCF::Future<int> fRet, int if_code) {
     //code here is no matter
}

根据区域合作框架的例子,绑定:

代码语言:javascript
复制
RCF::Future<int> fRet;
fRet = client->anyOfMyFunctions(
    RCF::AsyncTwoway( boost::bind(&p347ClientWrapper::onAsyncFunctionCompleted, this, fRet, if_code) ), 
    any_parameter_of_my_function);

"client“是RcfClient

大多数函数运行正常。但是其中一个(看起来和其他人一样)导致了

代码语言:javascript
复制
pure virtual method called
terminate called without an active exception

就像我想的那样,它发生在回调附近的某个地方,因为这个调用通常在服务器端处理。我猜,这个“纯虚拟”隐藏在RCF类的某个地方。不幸的是,我找不到办法,怎么调查这个案子.

更新:

突然间我找到了解药,但还是不完全明白原因。

让我们看看RCF定义:

代码语言:javascript
复制
RCF_METHOD_R1(int,doStartRotChannel_fixed,const channel_manager::RotChannelInitParams &)

它工作得很好

代码语言:javascript
复制
RCF_METHOD_R1(int,doStartRotChannel_orig,channel_manager::RotChannelInitParams &)

导致“纯虚拟方法称为”

因此,如果我将参数声明为const,它就能工作。我不知道为什么,也许有人能解释。

EN

回答 1

Stack Overflow用户

发布于 2014-10-03 08:06:10

来自C++03组: 13.1-3

包含在参数类型规范中的const类型说明符和易失性类型说明符非常重要,可用于区分重载函数声明。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26173337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档