gpt4 book ai didi

c++ - IDL 接口(interface)、C++、CORBA,我正在处理 "conflicting return type specified for"和 "invalid abstract return type for member function ‘virtual..."

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:00 27 4
gpt4 key购买 nike

3 天多来,我一直在处理 CORBA 和 C++ 以及用 IDL 编写的应用程序界面。

我的应用界面是这样的:

#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

我将它“编译”为 *.hh 和 *.cc 文件:omniidl -bcxx ForumInterface.idl

我的论坛对象(也在 IDL 中定义)如下所示:

#ifndef __FORUM_IDL__
#define __FORUM_IDL__

interface Forum
{
long getForumID();
void setForumID(in long id);
string getForumName();
void setFroumName(in string name);
Forum getForumParent();
void setForumParent(in Forum f);
};

#endif

我将它“编译”为 *.hh 和 *.cc 文件:omniidl -bcxx Forum.idl

我尝试编写 Forum 和 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

它的声明(现在它是空的):

#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 -I$OMNIORB_HOME/include -I$OMNIORB_HOME/include/omniORB4

但出现错误:

In file included from ForumImpl.cpp:1:0: ForumImpl.h:12:19: error: field ‘parent’ has incomplete type ForumImpl.h:20:19: error: conflicting return type specified for ‘virtual ForumImpl ForumImpl::getForumParent()’ Forum.hh:161:21: error: overriding ‘virtual _objref_Forum* _impl_Forum::getForumParent()’ ForumImpl.h:20:19: error: invalid abstract return type for member function ‘virtual ForumImpl ForumImpl::getForumParent()’ ForumImpl.h:6:7: note: because the following virtual functions are pure within ‘ForumImpl’: Forum.hh:162:16: note: virtual void _impl_Forum::setForumParent(Forum_ptr) ForumImpl.h:21:14: error: cannot declare parameter ‘f’ to be of abstract type ‘ForumImpl’ ForumImpl.h:6:7: note: since type ‘ForumImpl’ has pure virtual functions ForumImpl.cpp: In member function ‘virtual ForumImpl ForumImpl::getForumParent()’: ForumImpl.cpp:7:11: error: invalid abstract return type for member function ‘virtual ForumImpl ForumImpl::getForumParent()’ ForumImpl.h:6:7: note: since type ‘ForumImpl’ has pure virtual functions ForumImpl.cpp: At global scope: ForumImpl.cpp:8:42: error: cannot declare parameter ‘f’ to be of abstract type ‘ForumImpl’ ForumImpl.h:6:7: note: since type ‘ForumImpl’ has pure virtual functions

最糟糕的是我不知道为什么这段代码会给我这样的错误……我的意思是,我定义了所有的 ForumImpl 函数……所以现在它们中的任何一个都是虚拟的。我花了好几个小时试图弄清楚这有什么问题,但毫 headless 绪:(

有人能帮忙吗? 我的文件:http://www6.zippyshare.com/v/69552292/file.html我在这个 tar 存档中添加了一个 Makefile,因此只需运行命令“make all”,这将完成所有工作

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

编辑:

我更改了我的 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 In file included from ForumImpl.cpp:1:0: ForumImpl.h:20:20: error: invalid covariant return type for ‘virtual ForumImpl* ForumImpl::getForumParent()’ Forum.hh:161:21: error: overriding ‘virtual _objref_Forum* _impl_Forum::getForumParent()’

最佳答案

ForumImpl::getForumParent() 的签名应该如下所示:

Forum_ptr getForumParent();

有关更多信息,您应该下载 IDL to C++ mapping document from the OMG website .另请查看 Henning 和 Vinowski 的书 Advanced CORBA Programming with C++

关于c++ - IDL 接口(interface)、C++、CORBA,我正在处理 "conflicting return type specified for"和 "invalid abstract return type for member function ‘virtual...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11763036/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com