2017-01-31 6 views
0

私はOmnet ++を使用しており、C++コードを記述しています。私のモジュールのの.ccファイル内、C++は変数が関数だと考えます。

channel Link extends ned.DatarateChannel 
{ 
    datarate = 16Gbps; // 32 lines of 2ns clock 
    delay = 0us; 
} 

、私は次の関数を書いています:

void InPortAsync::getErrorTimeout(int sx, int sy, int rx, int ry, int dx, int dy, int &routerType, simtime_t &timeout) 
{ // find the flight time for packet from this node to the next joint node = TTL in queue 
    int dir0 =-1; 
    int dir1 =-1; 
    int temprx = -1; 
    int tempry = -1; 
    int outPort = -1; 
    int destRouterType, destTimeout; 
    Link* temp_Channel; 
    ... 
} 

私がリンクオブジェクトへのポインタを宣言しています明らかである私は、次の私のNEDファイル内の宣言を持っていますtemp_Channelという名前です。しかし、コンパイラは、次のエラーを返します。 「temp_Channelは」なぜGCCは私の宣言を理解していない、この範囲で

を宣言していませんでしたか?

ありがとうございます!

+4

「リンク」に適切なヘッダーを含めるのを忘れましたか?エラーはあなたが私たちに見せているラインから来たものであり、他のものではないと確信していますか? – nwp

+0

本当にC++ですか? – SergeyA

+1

私はOmnetを使ったことはありませんが、Linkの定義を含む.hファイルを生成するためにはnedファイルを使用する必要があります。そのようなファイルは存在しますか?あなたはそれを含めましたか?しかし、GCCが 'Link'ではなく' temp_Channel'でチョークするのはまだ不思議です。 –

答えて

4

NEDファイルのLinkチャンネルを宣言することは、C++コードとは関係ありません。あなたのコードに含めることができるヘッダやC++クラスは生成されません。実際、NEDファイルはコンパイル時ではなく実行時にのみ処理されます。

+0

このバージョンのDatarateChannelにリンクされたモジュール内の属性にアクセスする必要があります? – Liorusii

+0

私はどのようにして - cクラス 'cDatarateChannel'を通してLink - ' DatarateChannel'の父クラスへのリファレンスを使用しました。私はまだリンク自体のタイプを参照する方法、またはそれがC++に存在するかどうかを理解していません。 – Liorusii

+0

'DatarateChannel' NED型を拡張すると、新しいC++クラスは作成されません。 'Link' NED型の後ろのC++クラスは' cDatarateChannel'です。 'Link'が' cDatarateChannel'から振る舞い(つまりC++の実装)を継承しているのを見ると分かります。新しい動作を導入したい場合は、 '@class(MyNewClass)'プロパティを使ってNED型の振る舞いを定義するC++クラスを指定する必要があります。 – Rudi

関連する問題