私は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の両方の実装を書こうとしました。私はフォーラムから始めました。クラス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
しかし、エラーが発生しました:
ForumImpl.cpp:1:0からインクルードされたファイル:ForumImpl.h:12:19:エラー:フィールド'parent'のタイプが不完全ですForumImpl.h:20:19:エラー:'virtual ForumImplForumImpl::に指定された戻りタイプが競合していますgetForumParent()'Forum.hh:161:21:エラー:オーバーライド' virtual _objref_Forum * _impl_Forum :: getForumParent()'ForumImpl.h:20:19:エラー:メンバー関数の無効な抽象戻り型' virtual ForumImpl ForumImpl :: getForumParent ()'ForumImpl.h:6:7:注:次の仮想関数は' ForumImpl'内で純粋であるため:Forum.hh:162:16:注:virtual void _impl_Forum :: setForumParent(Forum_ptr)ForumImpl.h:21: 14:エラー:パラメータ'f'を抽象型'ForumImpl' ForumImpl.h:6:7に宣言できません:注:型'ForumImpl'には純粋仮想関数ForumImpl.cppがあるため:メンバー関数'virtual ForumImpl ForumImpl ::getForumParent()':ForumImpl.cpp:7:11:エラー:メンバー関数の抽象リターンタイプが無効です' virtual ForumImpl ForumImpl :: getForumParent()'ForumImpl.h:6:7:注:タイプ'ForumImpl'は純粋仮想関数ForumImpl.cpp:グローバルスコープで:ForumImpl.cpp:8:42:エラー:パラメーター'f'を抽象型'ForumImpl'と宣言できませんForumImpl.h:6:7:注:型'ForumImpl'は純粋であるため仮想関数
最悪なのは、なぜこのコードでこのようなエラーが発生するのかわからないことです...つまり、すべてのForumImpl
関数を定義したので、それらのいずれかが仮想になりました。私はこれの何が悪いのかを理解しようと何時間も費やしましたが、手がかりはありません:(
誰か助けてもらえますか?私のファイル: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 ForumImpl.cpp:1:0からインクルードされたファイル内:ForumImpl.h:20:20:エラー:'仮想ForumImpl*ForumImpl::の無効な共変リターンタイプgetForumParent()'Forum.hh:161:21:エラー:オーバーライド'仮想_objref_Forum * _impl_Forum :: getForumParent()'</ p>