gpt4 book ai didi

c++ - 从外部 C 结构继承时初始化成员

转载 作者:IT老高 更新时间:2023-10-28 22:14:05 27 4
gpt4 key购买 nike

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++) .

因此,我有以下两个问题:

  1. 提供的代码是完全错误还是我遗漏了一些相关方面? (毕竟,这篇文章似乎来自一个有信誉的来源)
  2. 实现预期效果的正确方法是什么(即将 C 结构体转换为 C++ 类并添加一些便利方法,例如构造函数等)?

更新:按照建议使用聚合初始化,即

mybuf() : buf{0, 0} {}

有效,但需要 C++11。因此,我添加以下问题:

  1. 使用C++03,有没有比使用下面的构造函数更好的方法来达到预期的结果?

    mybuf() {
    data = 0;
    count = 0;
    }

最佳答案

如果您可以使用兼容 c++11 的编译器,那么这将是使用 aggregate initialization 的初始化列表的完美用例。 .

mybuf() : buf{0, 0}
{}

关于c++ - 从外部 C 结构继承时初始化成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29745682/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com