Я гуглял и переполнял этот вопрос, но не смог найти ответа.
Я пытаюсь создать вектор с пользовательским классом, с которым у меня нет проблем.Я понимаю, что мне нужно сделать:
std::vector<ExtClass> varName;
Но я хочу сделать следующее:
Поскольку varName теперь имеет тип ExtClass, я хочу вызвать его конструктор в другом классе.Чтобы уточнить, я думаю, что код объяснит это лучше всего:
class ExtClass {
public:
int ext;
int pet;
ExtClass();
};
ExtClass:ExtClass() {
this->ext = std::rand();
this->pet = std::rand();
}
________________________
class MainClass {
public:
std::vector<ExtClass> attribute;
MainClass(int);
}
MainClass(int size) {
this->attribute.reserve(size) // reserving enough places in vector
for (int i = 0; i < size; ++i)
this->attribute[i] = new ExtClass(); // problem
}
Я использовал все открытые члены, чтобы избежать ненужного кода.
Я думал, так как атрибут std :: vector является векторомэлементов ExtClass, и поскольку ни один из них не был определен, я мог бы назначить каждый элемент вектора следующим образом:
new ExtClass()
, и это создаст, например:
attribute[0].ext = 5125;
attribute[0].pet = 151;
Этоэто определенно не тот случай, и компилятор утверждает в этой строке:
note: candidate: constexpr ExtClass& ExtClass::operator=(const ExtClass&)
class ExtClass {
^~~~~~
note: no known conversion for argument 1 from ‘ExtClass*’ to ‘const ExtClass&’
note: candidate: constexpr ExtClass& ExtClass::operator=(ExtClass&&)
note: no known conversion for argument 1 from ‘ExtClass*’ to ‘ExtClass&&’
Я не специалист по C ++, но относительно новичок в этом и практикуюсь.Можете ли вы сказать мне, в чем моя ошибка?Какое предположение я сделал неправильно?
Спасибо!