前言
在定义结构体KeyFrameInfo给出如下警告,提示结构体没有使用别名,即typedef没有起作用。消除该警告的方法为去掉typedef 或者补充别名。由于typedef和struct经常结合使用,在使用细节上认知有点模糊,因此,对此进行了查阅和整理。
// warning: ‘typedef’ was ignored in this declaration typedef struct KeyFrameInfo
typedef struct KeyFrameInfo
{
const std::string mTimeStamp;
cv::Mat mDepth;
};
struct类型定义与其变量的声明
用struct可以自定义数据类型,Person是定义的结构体数据类型的名字,类似于int。
struct Person // 结构体数据类型的定义
{
int age;
string name;
};
声明结构体类型变量有两种方式,一种是在定义时声明,另一种是需要时声明,类似于int a, b。注意:针对需要时声明,C与C++有所不同,C必须加上struct而C++不需要。C中为了简化声明struct变量,因此常在类型定义时与typedef结合使用。换言之,对于C++,其实可以不与typedef结合使用。
struct Person // 结构体数据类型定义时声明变量
{
int age;
string name;
} jack, lee;
struct Person kangkang; // C/C++语言,需要时声明变量(C语言,必须加上struct)
Person kangkang; // C++语言,需要时声明变量
typedef是为已有类型名取新的别名,当typedef与struct定义体联合使用时,则此时,定义体紧跟着的不再是struct变量,而是struct类型的别名。
typedef struct Person // 用typedef为struct Person起别名Person
{
int age;
string name;
} Person;
Person kangkang; // 此时对于C来说,变量的声明也可以不加struct