Впервые в C ++, и это дает мне шипение.
Фактический код находится на другом компьютере, и я не могу его скопировать, поэтому я сделаю все возможное с псевдокодом.
Мой финал - иметь вектор [указателей], к которому могут обращаться несколько различных объектов. Способ, которым я пытался это сделать, заключается в том, чтобы исходный класс, содержащий вектор, имел метод, подобный следующему:
std::vector<myObject*>& myClass::getVectorPointer(){
return &vectorPointer;
}
Итак, мои различные классы заканчиваются строкой кода, подобной этой:
std::vector<myObject*>* myStuff = myClassObject.getVectorPointer();
Тогда я хочу начать бросать объекты в вектор. Итак, сначала я создаю объект:
MyObject* tempObject = new MyObject("grrr");
А потом я хочу поместить его в вектор, поэтому я сделал это:
myStuff->push_back(tempObject);
Это прекрасно компилируется, но когда я запускаю, он задыхается. Проходя через отладчик я получаю:
402 неверное новое выражение в [some_] allocator :: construct
Понятия не имею, что это значит. Я попытался поставить :: перед моим новым, как в предложенном решении что-то говорилось, но это не сработало.
Итак, чтобы рассмотреть, притвориться, что это было что-то вроде этого, но с правильным синтаксисом и логикой:
Class A.h
#include <vector>
#include "myObject.h"
ClassA{
public:
classA();
inline std::vector<myObject*>* myClass::getVectorPointer(){ return &vectorPointer;}
private:
std::vector<MyObject*>* vectorPointer;
}
#include "A.h"
int main() {
ClassA myClassAObject;
std::vector<myObject*>* myStuff = myClassAObject.getVectorPointer();
MyObject* tempObject = new MyObject("grr");
myStuff->push_back(tempObject);
}
дает 402.
Это простой синтаксис, или я не в порядке, потому что указатели на векторы указателей просто нет?
Я пытался увидеть, как вы передадите вектор, и хотя большинство вещей, которые я вижу, показывает вызов функции, которая получает & vector и выполняет какие-то действия с вектором в функции, я не понимаю, как сильно отличается от вызова функции, которая возвращает ссылку, а затем делает вещи для вектора там. Это просто огромный логический недостаток с моей стороны?
Любая подсказка, как я могу исправить свою программу на то, что правильно, очень быстро?
Я собираюсь попробовать предложенные вещи. Вы все были невероятно полезны. Большое вам спасибо!