如何将结构移动到类中?

Posted

技术标签:

【中文标题】如何将结构移动到类中?【英文标题】:How to move a struct into a class? 【发布时间】:2010-03-28 22:22:57 【问题描述】:

我有类似的东西:

typedef struct Data_s 
  int field1;
  int field2;
 Data;

class Foo 
  void getData(Data& data);
  void useData(Data& data);

在另一个类的函数中,我可能会这样做:

class Bar 
  Data data_;
  void Bar::taskA() 
    Foo.getData(data_);
    Foo.useData(data_);
  

有没有办法在不创建新类的情况下将 Data 移出全局范围并进入 Foo ?数据反映了我在其他地方使用的库中存在的结构。 (即相同的字段,只是名称不同。我稍后将 Data 转换为另一个结构。我这样做是因为 Foo 是一个抽象类,而使用该库的派生类只是其中之一。)

目前,仅将其粘贴到类中并将 Data 替换为 Foo::Data 无处不在。

class Foo 
  typedef struct Data_s 
    int field1;
    int field2;
   Data;
  ...

我在Bar data_; 收到'Data' in class 'Foo' does not name a type

【问题讨论】:

那么你想创建一个类似于Data_s的类吗?或者您想在运行时将其成员的值复制到一个类中? 结构和类之间只有一些区别,你想通过'将结构移动到类'来实现什么?可能澄清一下你到底想做什么会有所帮助。 添加/澄清。这样更好吗? 【参考方案1】:

你可以在类中定义结构,但是你需要在你第一次使用它的地方之前做。结构和类本身一样,必须前向声明才能使用它们:

class Foo

public:
    struct Data
    
        int field1;
        int field2;
    ;

    void getData(Foo::Data& data) 
    void useData(Foo::Data& data) 
;

void UseFooData()

    Foo::Data bar;
    Foo f;
    f.getData(bar);
    f.useData(bar);

编辑:更新示例以使用与原始问题中列出的相同的字段/类名。请注意,为了在Foo 类之外可见,Data 需要声明为public,其他代码需要将其引用为Foo::Data

【讨论】:

既然问题有 struct Data_s 和 Foo 类,你能根据这些修改你的答案吗?【参考方案2】:

更准确地说,您提供的代码 sn-p 无法访问 Foo::Data 。类成员默认为私有可见性。

其次,当您使用 C++ 时,不建议使用 typedef 进行结构声明(还有其他有效用途,但您的用法不是)。

试试这个更正的版本:

class Foo 
public:
  struct Data 
    int field1;
    int field2;
  ;
  ...

【讨论】:

只是好奇,那么什么时候推荐结构声明的 typedef 呢? 从不使用 C++。在 C 语言中,如果您不使用 typedef,则必须在任何地方都说“struct that”,而 typedef 让您只说“that”。使用 C++,您不需要结构,因此 typedef 没用。 Typedef 还有其他用途,尤其是在存在模板的情况下,但是在类或结构定义上使用 typedef 是发现 C++ 经验为零的 C 程序员的快速方法。 实际上,我只是在这样做 b/c 我是按照 minizip 和 unrar 库的示例,它们是用 C 编写的。@.@

以上是关于如何将结构移动到类中?的主要内容,如果未能解决你的问题,请参考以下文章

intellij idea 鼠标移动到类上怎么显示包名

如何将对象添加到类中的静态向量

如何将数据库中一张表的多列映射到类中的一个数组/列表?

Material-UI Typescript 如何在组件类中从 makeStyle() 创建样式实例

Maven war插件将src / main / webapp复制到类中

如何将引用模块中字段的匿名提供者移动到单独的类中?