c++,冰.虚拟功能是纯粹的内部功能
c++, Ice. Virtual functions are pure within etc
我只是想从zeroc(带打印机的那个)修改一下这个例子。事情是这样的。
以下是Pritner.ice文件中的小界面:
#pragma once
module Demo
{
interface Printer
{
void printString(string s);
void printFloat(float val);
};
};
以及服务器端产生错误的类。
#include <Ice/Ice.h>
#include <Printer.h>
using namespace std;
using namespace Demo;
class PrinterI : public Printer
{
public:
virtual void printString(const string &, const Ice::Current&);
virtual void printFloat(const float &, const Ice::Current&);
};
void
PrinterI::
printFloat(const float &val,const Ice::Current&)
{
cout<<val<<endl;
}
void
PrinterI::
printString(const string &s, const Ice::Current&)
{
cout << s << endl;
}
错误如下:
Server.cpp: In function ‘int main(int, char**)’:
Server.cpp:49:37: error: cannot allocate an object of abstract type ‘PrinterI’
Ice::ObjectPtr object = new PrinterI;
^
Server.cpp:16:7: note: because the following virtual functions are pure within ‘PrinterI’:
class PrinterI : public Printer
^
In file included from Server.cpp:11:0:
./Printer.h:430:18: note: virtual void Demo::Printer::printFloat(Ice::Float, const Ice::Current&)
virtual void printFloat(::Ice::Float, const ::Ice::Current& = ::Ice::Current()) = 0;
^
make: *** [Server.o] Error 1
主要代码:
int
main(int argc, char* argv[]){
int status = 0;
Ice::CommunicatorPtr ic;
try
{
ic = Ice::initialize(argc, argv);
Ice::ObjectAdapterPtr adapter =
ic->createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -h localhost -p 10000");
Ice::ObjectPtr object = new PrinterI;
adapter->add(object, ic->stringToIdentity("SimplePrinter"));
adapter->activate();
ic->waitForShutdown();
}
catch(const Ice::Exception& e)
{
cerr << e << endl;
status = 1;
}
catch(const char* msg)
{
cerr << msg << endl;
status = 1;
}
if(ic)
{
try
{
ic->destroy();
}
catch(const Ice::Exception& e)
{
cerr << e << endl;
status = 1;
}
}
return status;
}
printString的部分很好,工作得很好,但当我想在interface的函数中使用float作为参数时,就会产生错误。我承认我不是c++专家,但我已经没有任何关于如何解决这个问题的线索了。
Ice::Float
定义了自己的类型。因此,使用普通的float
不能完成任务,并且原始方法保持未定义状态。
此外,除了使用Ice::Float
类型外,参数是通过值传递的,而不是作为对常量的引用,因此您还应该删除参数声明中的其他部分,如const
和&
。
毕竟,错误消息说明了一切——方法签名应该完全像这样:
void printFloat(Ice::Float, const Ice::Current&)
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 有没有可能有一个只有ADL才能找到的非好友功能
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 文件系统:复制功能的速度秘诀是什么
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 如何在Directwrite中获得给定字体的可用OpenType功能
- 对可变参数使用声明.如何选择正确的功能
- 询问在设计我的手臂模拟器功能表示格式1
- 授权派生的功能实现,而不使其纯粹
- c++,冰.虚拟功能是纯粹的内部功能