在Mixing C and C++ Code in the Same Program中,给出了以下示例(此处略微缩为相关部分)。假设buf.h
包含以下内容:
struct buf {
char* data;
unsigned count;
};
// some declarations of existing C functions for handling buf...
然后建议使用
extern "C" {
#include "buf.h"
}
class mybuf : public buf {
public:
mybuf() : data(0), count(0) { }
// add new methods here (e.g. wrappers for existing C functions)...
};
为了在具有附加功能的C++中使用该结构。
但是,这显然会产生以下错误:
error: class `mybuf' does not have any field named `data'
error: class `mybuf' does not have any field named `count'
其原因在How can I initialize base class member variables in derived class constructor?,C++: Initialization of inherited field和Initialize parent's protected members with initialization list (C++)中进行了说明。
因此,我有以下两个问题:
更新:按照建议使用聚合初始化,即
mybuf() : buf{0, 0} {}
可以,但是需要C++ 11。因此,我添加了以下问题:
mybuf() {
data = 0;
count = 0;
}
最佳答案
如果可以使用与c++ 11兼容的编译器,那么这对于使用aggregate initialization的初始化列表是一个完美的用例。
mybuf() : buf{0, 0}
{}