2016-03-27 14 views
-1

私はomnetpp v4.6用のINETフレームワーク3.2.2で作業しています。私のコードはINETフレームワークから.hファイルをインポートしていますが、INETフレームワークをコードリファレンスに追加しても、この完全なタイプのエラーは発生しません。#includeに完全なパスディレクトリを書きました。クラスは必要ですが、私は使用している属性を認識せず、 "不完全な型"のエラーを返しますが、エラーなしでインラインブール演算子で完全に正常に認識されています。 コードはC++で不完全な型のエラーを解決する方法はありますか?

#ifndef OPENFLOW_H_ 
#define OPENFLOW_H_ 

#define OFP_VERSION 0x01 

#include "inet/common/INETDefs.h" 

//doesn't recognize the includes 
#include <inet/networklayer/contract/ipv4/IPv4Address.h> 
#include <inet/linklayer/common/MACAddress.h> 

class MACAddress; 
class IPv4Address; 


struct oxm_basic_match { 
    int OFB_IN_PORT; 
    MACAddress OFB_ETH_DST; //error (field 'OFB_ETH_DST' has incomplete type 'MACAddress') 
    MACAddress OFB_ETH_SRC; //error (field 'OFB_ETH_SRC' has incomplete type 'MACAddress') 
    int OFB_ETH_TYPE; 
    IPv4Address OFB_IPV4_DST; //error (field 'OFB_IPV4_DST' has incomplete type 'IPv4Address') 
    int OFB_ARP_OP; /* ARP opcode. */ 
    IPv4Address OFB_ARP_SPA; /* ARP source IPv4 address. */ //error (field 'OFB_ARP_SPA' has incomplete type 'IPv4Address') 
    IPv4Address OFB_ARP_TPA; /* ARP target IPv4 address. */ //error (field 'OFB_ARP_TPA' has incomplete type 'IPv4Address') 
    MACAddress OFB_ARP_SHA; /* ARP source hardware address. */ //error (field 'OFB_ARP_SHA' has incomplete type 'MACAddress') 
    MACAddress OFB_ARP_THA; /* ARP target hardware address. */ //error (field 'OFB_ARP_THA' has incomplete type 'MACAddress') 
    uint32_t wildcards; 
    int getPriority(); 
}; 


inline bool operator==(const oxm_basic_match &m1, const oxm_basic_match& m2) { 
    return m2.OFB_IN_PORT == m1.OFB_IN_PORT 
      && m2.OFB_ETH_DST == m1.OFB_ETH_DST 
      && m2.OFB_ETH_SRC == m1.OFB_ETH_SRC 
      && m2.OFB_ETH_TYPE == m1.OFB_ETH_TYPE 
      && m2.OFB_ARP_OP == m1.OFB_ARP_OP 
      && m2.OFB_ARP_SHA == m1.OFB_ARP_SHA 
      && m2.OFB_ARP_SPA == m1.OFB_ARP_SPA 
      && m2.OFB_ARP_THA == m1.OFB_ARP_THA 
      && m2.OFB_ARP_TPA == m1.OFB_ARP_TPA; 
} 

です。

答えて

3

この場合、前方宣言は使用できません。完全なクラス定義を含むヘッダーファイルを含める必要があります。クラスMACAddress {...}

前方宣言は、ポインタまたは参照にのみ使用できます。ここでより完全な答えです - When can I use a forward declaration?

+0

どうすればいいですか?あなたは私がインポートしている.hファイルの属性、MACAddressとIPv4Addressを追加するべきであることを意味しますか? –

+0

私はあなたが使っているライブラリを知りません...しかし、何かをする必要があります #include ここでxxxはクラスMACAddressとIPv4Addressが定義されているヘッダファイルの名前です。 これらがinet/networklayer/contract/ipv4/IPv4Address.hとinet/linklayer/common/MACAddress.hにあるかどうか調べます。 – GeraltCZ

+0

クラスMACAddressとIPv4Addressはinet/networklayer/contract/ipv4/IPv4Addressにある.hファイルです.hとinet/linklayer/common/MACAddress.h ..私はinetフレームワークの両方からそれらをインクルードしましたが、それはまだ私に不完全なタイプのエラーを与えます、そして、私はフォワード宣言を取り除くと "MACAddressはタイプを指定しません" "IPv4Addressは型名を指定していません" –

関連する問題