2

学校のプロジェクトではidljを使用する必要がありますが、idlファイルでは前方宣言も使用する必要があります。idljが前方宣言をサポートしているかどうか誰かが知っていますか?これを実行しようとしましたが、エラーが発生します。

interface1.idl(34行目):Class1への前方参照がありますが、定義されていません。

これを克服する方法はありますか?残念ながら、他のidlコンパイラを使用することはできません...そしてこれに関する情報は見つかりませんでした。

編集:

interface1.idl:

interface SecondClass;

interface FirstClass
{
    //...
};

interface2.idl:

interface FirstClass;

interface SecondClass
{
    //...
};

idlj -fclient interface1.idl

与える:

interface1.idl(8行目):SecondClassへの順方向参照がありますが、定義されていません。}; ^

4

3 に答える 3

2
#ifndef _SecondClass
#define _SecondClass
#include "interface1.idl"
interface SecondClass
{
   typedef sequence<FirstClass> firstVector;
   SecondClass create();
};
#endif

#ifndef _FirstClass
#define _FirstClass
#include "interface2.idl"
interface FirstClass
{
   typedef sequence<SecondClass> secondVector;
   FirstClass create();
};
#endif

これを見てください。このパターンは、相互に依存するすべてのインターフェースに使用してください。

于 2012-08-23T21:51:02.860 に答える
1

私はそのORBに精通していませんが、可能であるはずです。クラスを前方宣言する場合は、翻訳者が何をすべきかを理解できるように、最終的にどこかに定義を提供する必要があることを覚えておいてください。

例えば:

interface SecondClass;  // forward declaration

interface FirstClass {

   SecondClass foo();
};

// now you must provide the IDL for SecondClass; 
// either write it out here or #include the appropriate IDL file
于 2012-08-23T16:45:06.663 に答える
0

私のコードのこのバージョンは最終的に機能しました(エラーなしでコンパイルされました)が、それでも方法と理由がわかりません; P

方法と理由はわかりませんが、最終的にエラーなしでコンパイルされました。ご覧ください。

ファイルinterface1.idl

#ifndef __FIRSTCLASS_IDL__
#define __FIRSTCLASS_IDL__

#include "interface2.idl"

interface FirstClass
{
    typedef sequence<SecondClass> secondVector;
    FirstClass create();
};

#endif

ファイルinterface2.idl

#ifndef __SECONDCLASS_IDL__
#define __SECONDCLASS_IDL__

interface FirstClass;

interface SecondClass
{
    typedef sequence<FirstClass> firstVector;
    SecondClass create();
};

#include "interface1.idl"

#endif

include一方のディレクティブがidlファイルの上部にあり、もう一方のディレクティブが下部にある必要がある理由については、少し混乱しています。誰もがそれを知っていますか?もう!

于 2012-08-23T21:49:51.753 に答える