我怎样才能在struct中有类

时间:2012-09-05 09:23:14

标签: c++ class struct

我有一个班..

class myClass
{
public:
    myClass(int time);
}

然后我需要在struct中使用这个类。

class TopClass
{
 public:
  typedef struct{
    int myint;
    myClass myclass;
  }tStruct;

  tStruct sStruct1;
  tStruct sStruct2;

}

我该怎么办?如何为myClass调用构造函数? 是否只能使用类而不是struct?

我的构造函数

TopClass::TopClass():               
        sStruct1({32, myClass(100)}),
        sStruct2({52, myClass(1000)})
{

}

但我收到错误:

  

扩展初始值设定项列表仅适用于-std = c ++ 0x或-std = gnu ++ 0x

3 个答案:

答案 0 :(得分:1)

  

我该怎么办?如何为myClass调用构造函数?

你的struct需要一个构造函数,因为它有一个没有默认构造函数的成员。为了拥有构造函数,它还需要自己的名称,而不仅仅是typedef别名。

struct tStruct {
    // If you want a default constructor:
    tStruct() : myClass(42) {}

    // If you want to specify the time:
    tStruct(int time) : myClass(time) {}

    int myint;
    myClass myclass;
};
  

只能使用class而不是struct吗?

classstruct的意思完全相同(除了具有不同默认访问说明符的次要区别)。你可以做任何事情,你可以做另一个。

答案 1 :(得分:1)

您可以将构造函数添加到struct:http://ideone.com/ifBw2

class TopClass
{
 public:
  struct tStruct {
    tStruct(int time, int k = 0): myint(k), myclass(time) {}
    int myint;
    myClass myclass;
  };

  TopClass(int t): sStruct1(t), sStruct2(t) {}

  tStruct sStruct1;
  tStruct sStruct2;

};

修改

至于新问题 - 你必须使用新标准(-std=c++0x)这样做。在旧标准中,您必须添加显式ctor来初始化成员变量。 C ++中的structclass几乎完全相同 - 您可以添加ctors,成员函数和静态函数。唯一的区别是默认隐私 - struct的公开和private的{​​{1}}:

class

完全相同
class A {
public: 
  int b;
};

答案 2 :(得分:0)

实际上,Pawel Zubrycki的答案还可以。

但我想知道为什么你必须这样做,你必须在TopClass中导入另一个类构造函数。

  

我的意思是代码应该遵循高内聚和低耦合的规则。   在软件构造中,我们宁愿选择composition(一种重要的设计模式)来实现类定义。类似下面的代码。

class B{
public:
    B(int y){b = y;}
private:
    int b;
};

class A {
public:
    A(int x):b(x){...};
private:
    B b;
};

从代码中我们可以最大化B类,并显然降低了A类的复杂性。 B可以自己改变。