Передача константы в конструктор C ++

У меня есть класс, где конструктор получает целое число:

class One
{
public:
One(int i)
{
foo(i);
}

void foo(int i)
{
// Do something with i
}
};

Выше компилируется нормально.

У меня есть второй класс, который имеет член типа Один. Компиляция этого приводит к ошибке, где я передаю int (ошибка «ожидается спецификатор типа»):

class Two
{
public:
One x(1);
};

Я могу, однако, инициализировать член, если это указатель:

class Three
{
public:
One *x = new One(1);
};

Могу ли я инициализировать класс без использования указателя?

Спасибо!

3

Решение

С:

class Two
{
public:
One x(1);
};

и на основе правил языка компилятор пытается разобрать x как функция-член, возвращающая объект типа One, а не видя действительным параметров деклараций который требует по крайней мере список 0 или более Тип Спецификаторs, он видит не типа.

class Three
{
public:
One *x = new One(1);
};

Могу ли я инициализировать класс без использования указателя?

Да, используйте равномерная распорка инициализация синтаксис для Значение инициализация:

class Three
{
public:
One x{1};
};

Или же копия инициализация:

class Three
{
public:
One x = 1;  //Uses converting constructor,
//see http://en.cppreference.com/w/cpp/language/converting_constructor

//or
One x = One(your, multiple, arguments, here);
};

Или же член-инициализатор-листы в конструкторе:

class Three
{
public:
Three(...) : x(1) { ... }
One x;
...
};
4

Другие решения

One x(1);

анализируется как объявление функции, поэтому он ожидает тип в скобках. Ты можешь использовать

One x = 1;

или же

One x{1};

вместо.

4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector