Как juanchopanza упоминалось в комментариях, sumVector
является указателем. К сожалению для вас, operator[]
определен для указателей, которые, возможно, дали запутанную ошибку компиляции для новичков.
Для решения, которые наилучшим образом сохраняет ошибочное намерение исходного кода, это:
sumVector[i] = myArray[i] + original.myArray[i];
потребности быть таким:
(*sumVector)[i] = myArray[i] + original.myArray[i];
Таким образом, вы де-ссылка сначала указатель, затем введите operator[]
для векторного класса. Это действительно плохо, хотя и, возможно, даже не решение.
Вы должны понимать, что делает ваш код. Вы назначаете новый массив Items
на кучей, а затем возвращаете копию Vec
с использованием *Item
, что эквивалентно Item[0]
, в качестве конструктора Vec
. Вы не только создаете Vec
с одним двойным вводом (не видя объявления класса, я не знаю, действительно ли это, но это, вероятно, нет), но это распределение кучи Items
никогда не будет иметь соответствующего бесплатного поскольку вы потеряли единственную ссылку на него, когда вы покидаете область действия. Вы никогда не сможете освободить память, а это значит, что это утечка памяти.
Правильное намерение (я предполагаю) состоит в том, чтобы создать локальный вектор в стеке с вычислениями, а затем вернуть его. Это означает, что изменение две строки:
Item* sumVector = new Item(mySize)
return * sumVector;
в
Vec sumVector(mySize); //now this is actually a vector
return sumVector;
Обратите внимание, что векторные типы, как правило, просто держат указатель на их тип класса, в дополнение к некоторым метаданным. Это значение указателя выделяется в стеке, а сам указатель указывает на кучную память, которой управляет вектор.
'sumVector' - это указатель (ему не нужно быть, и его не должно быть.) Подумайте, что делает' operator [] 'при применении к указателю. – juanchopanza
О, нет оператора утечки памяти! Почему вы возвращаете новый объект по стоимости? – Borgleader
Привет приветствую _ @ TheFaceOfBlue_! Как насчет того, чтобы просто использовать ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector), прежде чем начинать свой собственный? Есть много препятствий и ошибок, чтобы сделать это правильно, и почти никогда не стоит того, чтобы придумать проприетарную реализацию. –