-3

我有课。。

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

然后我需要在结构中有这个类。

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

  tStruct sStruct1;
  tStruct sStruct2;

}

我该怎么做?如何调用 myClass 的构造函数?是使用类而不是结构的唯一方法吗?

我的构造函数

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

}

但我收到错误:

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

4

3 回答 3

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意味着完全相同的东西(除了具有不同的默认访问说明符的微小区别)。你可以用一个做的任何事情,你都可以用另一个做。

于 2012-09-05T09:33:20.363 回答
1

您可以将构造函数添加到结构: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 来初始化成员变量。struct在 C++ 中几乎完全相同class- 您可以添加 ctors、成员函数、静态函数。唯一的区别是默认隐私 - public forstructprivatefor class

class A {
public: 
  int b;
};

完全一样

struct A {
  int b; 
};
于 2012-09-05T09:34:17.200 回答
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类的复杂度。A&B可以自己改变。

于 2012-09-18T15:55:00.680 回答