-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;
}
です。
どうすればいいですか?あなたは私がインポートしている.hファイルの属性、MACAddressとIPv4Addressを追加するべきであることを意味しますか? –
私はあなたが使っているライブラリを知りません...しかし、何かをする必要があります #include ここでxxxはクラスMACAddressとIPv4Addressが定義されているヘッダファイルの名前です。 これらがinet/networklayer/contract/ipv4/IPv4Address.hとinet/linklayer/common/MACAddress.hにあるかどうか調べます。 –
GeraltCZ
クラスMACAddressとIPv4Addressはinet/networklayer/contract/ipv4/IPv4Addressにある.hファイルです.hとinet/linklayer/common/MACAddress.h ..私はinetフレームワークの両方からそれらをインクルードしましたが、それはまだ私に不完全なタイプのエラーを与えます、そして、私はフォワード宣言を取り除くと "MACAddressはタイプを指定しません" "IPv4Addressは型名を指定していません" –