Есть MyClass с единственным конструктором (по умолчанию), который инициализирует константу (любой инт или еденичка по умолчанию).
Нужно сделать вектор с этим классом, с не умолчальным значением конечно же.
Как?
C++. Вектор класса (Как инициализировать константу данных класса?)
Модератор: Модераторы разделов
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: C++. Вектор класса
Код: Выделить всё
#include <vector>
...
std::vector<MyClass> vector;Если у MyClass конструктор по-умолчанию есть, то всё нормально будет. Насчёт инициализации константы — не понял, что имелось в виду.
-
vipermagi
- Сообщения: 83
- ОС: AgiliaLinux
Re: C++. Вектор класса
Мне нужно, чтобы значение константы было допустим 6 или 10, а в конструкторе по умолчанию 1 стоит. После создания вектора он заполнится объектами MyClass с внутри константами значения 1 и ни как это назад не поменять.
Но оно и специально так сделано, чтобы нельзя было потом у объекта это свойство поменять.
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: C++. Вектор класса
Т.е. у Вас, что такое:
?
Тогда никак легальным способом. Можно сделать вектор указателей на объекты, тогда можно без проблем:
Или, как вариант, сделать поле неконстантным, закрытым (private). Перегрузить конструктор копирования/оператор присваивания и сделать метод для чтения значения данного поля.
Код: Выделить всё
class MyClass
{
public:
MyClass(int z = 1) : x(z) {}
const int x;
};?
Тогда никак легальным способом. Можно сделать вектор указателей на объекты, тогда можно без проблем:
Код: Выделить всё
std::vector<std::unique_ptr<MyClass>> v;
v.push_back(std::unique_ptr<MyClass>(new MyClass(7)));Или, как вариант, сделать поле неконстантным, закрытым (private). Перегрузить конструктор копирования/оператор присваивания и сделать метод для чтения значения данного поля.
-
vipermagi
- Сообщения: 83
- ОС: AgiliaLinux
Re: C++. Вектор класса
Да, у меня именно такое.
И печалька берёт от того, что нужно будет в трёхмерный массив пушбэками заталкивать
Думал, всё же есть вариант, залез спросил.
И печалька берёт от того, что нужно будет в трёхмерный массив пушбэками заталкивать
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: C++. Вектор класса
Может Вы просто не так пытаетесь решить задачу? Расскажите подробнее, что Вам надо сдлеать.
UPD раз Вам не нравится push_back, может подойдёт что-то такое:
UPD раз Вам не нравится push_back, может подойдёт что-то такое:
Код: Выделить всё
#include <iostream>
#include <vector>
#include <memory>
class MyClass
{
public:
MyClass(int x = 1) : xp(x) {}
int x() const { return xp; }
private:
int xp;
};
int main()
{
std::vector<MyClass> v {7, 9, 8};
for (const auto& f : v) {
std::cout << f.x() << std::endl;
}
return 0;
}-
vipermagi
- Сообщения: 83
- ОС: AgiliaLinux
Re: C++. Вектор класса
Сильно сомневаюсь, что я пытаюсь не правильно. Это лаба по нейросетям. Собственно класс нейрона нужно засунуть в класс сети, в элемент данных двухмерного вектора. Естественным было желание сделать это в одну строчку при объявлении в конструкторе класса сети.
То есть константа из вопроса тут вобщем не при чём, она только делает понятным моё желание; ведь в итоге теперь кроме фор форыча с кучей new в конструкторе, мне нужно будет это ещё так же подмести в деструкторе.
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: C++. Вектор класса
Ну, я выше привёл пример с initializer_list, так не подходит?
-
vipermagi
- Сообщения: 83
- ОС: AgiliaLinux
Re: C++. Вектор класса
gcc-4.5.2 это не понимает.
-
/dev/random
- Администратор
- Сообщения: 5456
- ОС: Gentoo
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: C++. Вектор класса
Ну, или заменить for ( : ) на обычный с итератором.