是否可以从结构中定义子项并将其设置为成员?

a.t*_*aby 1 c++ struct

假设我们定义了以下结构:

struct MyStrusture{
    unsigned char code;
    unsigned char * data;
    int size;
};
Run Code Online (Sandbox Code Playgroud)

是否可以定义一个从MyStructure继承并同时设置其成员的新结构?像这样的东西:

struct MyStrusture1 : MyStrusture{
        code=1;
        data={1,2,3};
        size=3;
    };
Run Code Online (Sandbox Code Playgroud)

我已经尝试了但它没有编译我必须重新定义子结构中的每个成员.我怎样才能在派生结构中找到父成员?

顺便说一句,我的意见是使用MyStrusture作为函数参数,所以method1(MyStructure)当我调用函数时我可以用这种形式写签名我可以使用MyStructure1或2等等.这是标准方法还是我应该使用另一种技术?

谢谢你的帮助.

Chr*_*ckl 5

我假设你的问题只是关于C++,而不是C,因为你是从你的基础结构派生出来的.我还假设C++ 11.

为了得到你想要的,你可以使用以下语法:

struct MyStrusture1 : MyStrusture
{
    MyStrusture1() : MyStrusture({ 1, nullptr, 3 }) {}
};
Run Code Online (Sandbox Code Playgroud)

请注意,我初始化了data指针nullptr以解释基本概念.

用你想要的方式用一些内容初始化它,现在这很棘手.一个天真的方法是:

struct MyStrusture1 : MyStrusture
{
    MyStrusture1() : MyStrusture({ 1, new unsigned char[3] { 1, 2, 3 }, 3 }) {}
};
Run Code Online (Sandbox Code Playgroud)

但这会产生各种各样的问题,例如谁应该删除data以及何时删除.我的猜测是你根本不需要动态分配,基础结构中的指针实际上应该是一个数组:

struct MyStrusture{
    unsigned char code;
    unsigned char data[3];
    int size;
};

struct MyStrusture1 : MyStrusture
{
    MyStrusture1() : MyStrusture({ 1, { 1, 2, 3 }, 3 }) {}
};
Run Code Online (Sandbox Code Playgroud)

如果大小应该是可变的,std::vector可以使用:

#include <vector>

struct MyStrusture{
    unsigned char code;
    std::vector<unsigned char> data;
    int size;
};

struct MyStrusture1 : MyStrusture
{
    MyStrusture1() : MyStrusture({ 1, { 1, 2, 3 }, 3 }) {}
};
Run Code Online (Sandbox Code Playgroud)