如何解决c ++中的不完整类型错误?

时间:2016-03-27 11:47:37

标签: c++

我正在使用INET框架3.2.2 for omnetpp v4.6。我的代码是从INET框架导入.h文件但是这个不完整类型的错误不断出现,即使我已经在我的代码引用中添加了INET框架,并且我已经在#include中编写了完整的路径目录并且我已经声明了我需要的类但它仍然无法识别我正在使用的属性并给我“不完整类型”错误但它们在内联bool运算符中被完全识别,没有错误。 这是代码:

#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;
}

有什么帮助吗?

1 个答案:

答案 0 :(得分:3)

在这种情况下,您不能使用前向声明。您应该包含包含完整类定义的头文件。 class MACAddress {...}

前向声明只能用于指针或引用。这是一个更完整的答案 - When can I use a forward declaration?