C++ 如何将结构移动到类中?

C++ 如何将结构移动到类中?,c++,class,struct,C++,Class,Struct,我有点像: 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.use

我有点像:

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中?数据镜像我在别处使用的库中存在的结构。(也就是说,相同的字段,只是不同的名称。稍后我将数据转换到另一个结构中。之所以这样做,是因为Foo是一个抽象类,而使用库的派生类只是其中的一个。)

目前,仅仅将其粘贴到类中并用
Foo::Data
替换
Data
到处都不起作用

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

我在类“Foo”中获得
“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
,更准确地说,Foo::Data在您提供的代码段中不可访问。类成员默认为私有可见性

第二,当您使用C++时,不建议使用结构声明的TyEuff(其他有效的用法,但您的用法不)。 请尝试此更正版本:

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

那么您想创建一个类似于数据的类?或者您想在运行时将其成员的值复制到类中?struct和class之间只有一些区别,您试图通过“将struct移动到class”来实现什么?也许对你到底想做什么做一些澄清会有所帮助。这样更好吗?既然问题有结构数据和类FO,你能用这些修改你的答案吗?只是好奇,什么时候推荐结构声明的Type?C++中从来没有。在C语言中,如果你没有使用typedef,你必须在任何地方说“struct that”,typedef只允许你说“that”。用C++你不需要这个结构,所以TyPulf没用。Typedef有其他用途,尤其是在模板的存在下,但是类或结构定义上的Type表示快速的方式来发现C++程序员的零c++体验。实际上,我只做B/C,我遵循的是MyIZIP和UNRAR库的例子,这些库是用C.@