如何将结构移动到类中?
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 编写的。@.@以上是关于如何将结构移动到类中?的主要内容,如果未能解决你的问题,请参考以下文章
Material-UI Typescript 如何在组件类中从 makeStyle() 创建样式实例