Как я могу иметь класс в структуре

У меня есть класс ..

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

-3

Решение

Вы можете добавить конструктор в структуру: 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, функции-члены, статические функции. Единственная разница — конфиденциальность по умолчанию — общедоступная для struct а также private за class:

class A {
public:
int b;
};

точно так же, как

struct A {
int b;
};
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 означают одно и то же (кроме незначительного различия в наличии разных спецификаторов доступа по умолчанию). Все, что вы можете сделать с одним, вы можете сделать с другим.

1

На самом деле, ответ Павла Зубрицкого в порядке.

Но я хочу знать, почему вы должны сделать так, чтобы вы импортировали другой конструктор класса внутри 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 & Б может изменить все самостоятельно.

0
По вопросам рекламы [email protected]