2017-06-06 52 views
-1

如何将布尔运算符==添加到结构bd_addr_t?我在C++项目中使用这个文件。bool operator == typedef struct

#ifndef APITYPES_H_ 
#define APITYPES_H_ 

#ifdef __GNUC__ 

#define PACKSTRUCT(decl) decl __attribute__((__packed__)) 
#define ALIGNED __attribute__((aligned(0x4))) 

#else //msvc 

#define PACKSTRUCT(decl) __pragma(pack(push, 1)) decl __pragma(pack(pop)) 
#define ALIGNED 

#endif 


typedef unsigned char uint8; 
typedef unsigned short uint16; 
typedef signed short int16; 
typedef unsigned long uint32; 
typedef signed char int8; 

typedef struct bd_addr_t 
{ 
    uint8 addr[6]; 

}bd_addr; 

typedef bd_addr hwaddr; 
typedef struct 
{ 
    uint8 len; 
    uint8 data[]; 
}uint8array; 

typedef struct 
{ 
    uint8 len; 
    int8 data[]; 
}string; 

#endif 

我尝试添加

bool operator==(const bd_addr_t& a) const 
    { 
     return (addr[0] == a.addr[0] && addr[1] == a.addr[1] && addr[2] == a.addr[2] && addr[3] == a.addr[3] && addr[4] == a.addr[4] && addr[5] == a.addr[5]); 
    } 

但是,这将引发编译过程中两个错误:

unknown type name 'bool' bool operator==(const bd_addr_t& a) const 

expected ':', ',', ';', '}' or '__attribute__' before '==' token bool operator==(const bd_addr_t& a) const 
+0

你有没有审查[比较运算符](http://en.cppreference.com/w/cpp /语言/ operator_comparison)? –

+0

你真的在这个文件上使用C++编译器吗?看起来它不知道典型的C++特性。 – bipll

+2

为什么在C++中使用'typedef struct'? – Slava

回答

0

不能添加这样的功能到这个标题所使用的C编译器为好。其中一种方法可能是创建一个只用于您的C++代码并添加独立函数的包装器头文件(它不能是一种方法,因为这需要在struct中声明,并使该代码与C不兼容):

#include <original_header.h> 
#ifndef __cplusplus 
#error This header is only to be included in C++ code 
#endif 

bool operator==(const bd_addr_t& a, const bd_addr_t& b); 

,然后实现它的.cpp文件或一个你可以在这个头实现,而且使该功能inline

相关问题