我有类似的东西:
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_);
}
}
有没有办法在不创建新类的情况下将数据移出全局范围并移到Foo中?数据反射(reflect)了我在其他地方使用的库中现有的结构。 (即,相同的字段,只是名称不同。我稍后将数据转换为其他结构。之所以这样做,是因为Foo是一个抽象类,而使用该库的派生类只是其中的一个。)
当前,仅将其粘贴到类中并在任何地方都用
Data
替换Foo::Data
无效。class Foo {
typedef struct Data_s {
int field1;
int field2;
} Data;
...
}
我在
'Data' in class 'Foo' does not name a type
上获得Bar data_;
最佳答案
您可以在类中定义该结构,但需要在首次使用它之前进行。与类本身一样,结构必须进行前向声明才能使用它们:
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
。