我有一个班..
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
答案 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吗?
class
和struct
的意思完全相同(除了具有不同默认访问说明符的次要区别)。你可以做任何事情,你可以做另一个。
答案 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 ++中的struct
与class
几乎完全相同 - 您可以添加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可以自己改变。