IDL接口,C++;,科尔巴,I';我处理的是;为“指定了冲突的返回类型”;及;成员函数的抽象返回类型无效‘;虚拟的……”; 超过3天,我一直在处理CORBA和C++,以及我在IDL中编写的应用程序接口。

IDL接口,C++;,科尔巴,I';我处理的是;为“指定了冲突的返回类型”;及;成员函数的抽象返回类型无效‘;虚拟的……”; 超过3天,我一直在处理CORBA和C++,以及我在IDL中编写的应用程序接口。,c++,compiler-errors,corba,idl,omniorb,C++,Compiler Errors,Corba,Idl,Omniorb,我的应用程序界面如下所示: #ifndef __FORUM_INTERFACE_IDL__ #define __FORUM_INTERFACE_IDL__ #include "Forum.idl" typedef sequence<Forum> Forums; interface ForumInterface { Forums getForumList(in Forum f); Forums getUsersForumList(in long UsersID);

我的应用程序界面如下所示:

#ifndef __FORUM_INTERFACE_IDL__
#define __FORUM_INTERFACE_IDL__

#include "Forum.idl"
typedef sequence<Forum> Forums;

interface ForumInterface
{
    Forums getForumList(in Forum f);
    Forums getUsersForumList(in long UsersID);
    void addNewTopic(in Forum f, in long UsersID, in string title);
};

#endif
Forum_ptr getForumParent();
我通过以下方式将其“编译”为*.hh和*.cc文件:omniidl-bcxx Forum.idl

我试图写一个论坛和ForumInterface的实现。我从Forum开始,这里是类FroumImpl的定义:

#ifndef __FORUMIMPL_H__
#define __FORUMIMPL_H__

#include "Forum.hh"

class ForumImpl : public POA_Forum
{
    private :

        long id;
        char *name;
        ForumImpl parent;

    public :

        long getForumID();
        void setForumID(long id);
        char* getForumName();
        void setFroumName(const char* name);
        ForumImpl getForumParent();
        void setForumParent(ForumImpl f);
};

#endif
它的声明(目前为空):

我试着编译它

g++ -c ForumImpl.cpp -I$OMNIORB_HOME/include -I$OMNIORB_HOME/include/omniORB4
但是有错误:

在ForumImpl.cpp中包含的文件中:1:0:ForumImpl.h:12:19:错误: 字段“parent”的ForumImpl类型不完整。h:20:19:错误: 为“virtual ForumImpl”指定的返回类型冲突 ForumImpl::getForumParent()'Forum.hh:161:21:错误:重写 'virtual_objref_Forum*_impl_Forum::getForumParent()' ForumImpl.h:20:19:错误:成员的抽象返回类型无效 函数“virtual ForumImpl ForumImpl::getForumParent()” ForumImpl.h:6:7:注意:因为以下虚拟函数是 “ForumImpl”中的纯粹:论坛。hh:162:16:注:虚拟虚空 _impl_Forum::setForumParent(Forum_ptr)ForumImpl.h:21:14:错误:无法将参数“f”声明为抽象类型“ForumImpl” ForumImpl.h:6:7:注意:因为类型'ForumImpl'具有纯虚拟 functions ForumImpl.cpp:在成员函数的虚拟ForumImpl中 ForumImpl::getForumParent()':ForumImpl.cpp:7:11:错误:无效 成员函数的虚拟示例的抽象返回类型 ForumImpl::getForumParent()'ForumImpl.h:6:7:注意:自类型 “ForumImpl”在全局范围内具有纯虚拟函数ForumImpl.cpp: ForumImpl.cpp:8:42:错误:无法将参数“f”声明为 抽象类型'ForumImpl'ForumImpl.h:6:7:注意:自类型 “ForumImpl”具有纯虚拟功能

最糟糕的是我不知道为什么这个代码会给我这样的错误。。。我的意思是,我定义了所有的
ForumImpl
函数。。。所以他们中的任何一个现在都是虚拟的。我花了好几个小时想弄清楚这到底是怎么回事,但没有任何线索:(

有人能帮忙吗?我的文件:我在这个tar归档文件中添加了一个Makefile,所以只需运行命令“makeall”,就可以完成所有工作

如果有人能告诉我为什么会出现这些错误,以及如何修复这些错误,我将不胜感激。我真的需要它。干杯:)

编辑:

我更改了我的ForumImpl.h和ForumImpl.cpp:

#ifndef __FORUMIMPL_H__
#define __FORUMIMPL_H__

#include "Forum.hh"

class ForumImpl : public POA_Forum
{
    private :

        long id;
        char *name;
        ForumImpl *parent;

    public :

        long getForumID();
        void setForumID(long id);
        char* getForumName();
        void setFroumName(const char* name);
        ForumImpl* getForumParent();
        void setForumParent(ForumImpl *f);
};

#endif

#include "ForumImpl.h"
long ForumImpl::getForumID(){}
void ForumImpl::setForumID(long id){}
char* ForumImpl::getForumName(){}
void ForumImpl::setFroumName(const char* name){}
ForumImpl* ForumImpl::getForumParent(){}
void ForumImpl::setForumParent(ForumImpl *f){}
但这给了我这些错误:

g++-c ForumImpl.cpp-IMNIORB_HOME/include -IMNIORB_HOME/include/omniORB4在ForumImpl.cpp中包含的文件中:1:0:ForumImpl.h:20:20:错误:协变返回无效 “虚拟ForumImpl*ForumImpl::getForumParent()的类型” Forum.hh:161:21:错误:覆盖“虚拟”objref\u论坛* _impl_论坛::getForumParent()


ForumImpl中的方法签名应与Forum.hh中生成的基类匹配。他们应该返回公正的论坛。我不知道omniorb的详细情况,但TAO有数百个使用此功能的示例,例如我们的银行示例,您也可以在

在线上找到
ForumImpl::getForumParent()
的签名如下所示:

#ifndef __FORUM_INTERFACE_IDL__
#define __FORUM_INTERFACE_IDL__

#include "Forum.idl"
typedef sequence<Forum> Forums;

interface ForumInterface
{
    Forums getForumList(in Forum f);
    Forums getUsersForumList(in long UsersID);
    void addNewTopic(in Forum f, in long UsersID, in string title);
};

#endif
Forum_ptr getForumParent();

有关更多信息,请下载。也可以用C++查看Hehan-VioWiSK的高级CORBA编程。

我在过去4年中没有做任何CORBA编程,而且不记得细节,但是错误表明生成的基类返回一个<代码> ObjRefFixFux*,但是你返回了一个<代码> FuimIMPL< /COD>。还请注意,您不能在其内部存储类型(即,
父成员可能是指针或CORBA引用)@David Rodríguez-dribeas:请看我的编辑,不是这样的…:(仍然是这样。您返回一个<代码> FUMUMIL**/CODE),其中基返回一个代码> ObjReFixField**/Cuth.I,我不记得CORBA映射到C++,但在生成的头中可能有一些代码“<代码> .ObjReFixFuffeAd/Cube”到CORBA认可类型。这是您应该使用的类型。注意,<代码> FuimIMPL
是服务的实现,但CORBA引用是客户端(这是一个接受请求、可能序列化并通过网络发送请求、被ORB解码并发送到实现的对象…)@David Rodríguez-dribeas:这对我来说很奇怪,因为我的应用程序类中有
GroupImpl
,它编译时没有错误。我将类型更改为
论坛
,看看:但仍然有一个错误: