在了解ice这个开源的分布中间件应用过程中,由于目前的汉化的教程还只是1.3.0版本,目前不断更新升级的ice版本已经有不少的修改。碰到stringToIdentity 函数的调用,1.3.0 的教程都是用如下的形式(这是教程中文件系统服务端的代码中出现的)。而测试环境又是新的版本,所以会出现编译不了的情况。

Ice::Identity myID = Ice::stringToIdentity(parent? IceUtil::generateUUID(): "RootDir");


提示:

error: 'stringToIdentity' is not a member of 'Ice'

   google 了这个信息,发现很多人碰到该问题,最后查到官方论坛上的一个帖子,才搞清楚这个问题,大概是:要用Ice::stringToIdentity 的形式,还要包含:Ice/IdentityUtil.h 头文件,但是在以后新的版本中, stringToIdentity()  方法将会移到 Communicator 界面来实现。
尝试着先引入该头文件后,虽然可以编译通过,但是出现:
 

警告:‘stringToIdentity’ 已过时(于 /usr/include/Ice/IdentityUtil.h:18 声明)

根据最新的教程:Ice-3.2.1.pdf 英文文档中 该代码是:

Ice::Identity myID = _adapter.getCommunicator()->stringToIdentity(parent? IceUtil::generateUUID(): "RootDir");


也是无法正常编译的。 最后只能将代码改为:

Ice::Identity myID = _adapter->getCommunicator()->stringToIdentity(parent? IceUtil::generateUUID(): "RootDir");


终于可以编译通过。


转自:http://blog.chinaunix.net/uid-43642-id-2124582.html