Перегрузка оператора "унарный минус" в шаблонном классе

программирование C++

Есть такой класс:

template <unsigned int _dimension>
class VectorNf
{
public:

const unsigned int dimension;

float* v;

VectorNf() : dimension(_dimension) {
v = new float[dimension];
memset(v, 0, sizeof(float)*dimension);
}

~VectorNf() {
delete[] v;
}

VectorNf& operator = (const VectorNf &vec) {
for(unsigned int i = 0; i < dimention; i++) {
v[i] = vec.v[i];
}
return *this;
}

VectorNf operator - () {
VectorNf<_dimension> rVec;
for(unsigned int i = 0; i < dimension; i++) {
rVec.v[i] = -v[i];
}
return rVec;
}
};


Использую так:

VectorNf<10> vecF;
vecF = -vecF;

Код компилируется, но при использовании унарного минуса во время выполнения такая ошибка:
http://img716.imageshack.us/img716/2091/l481.jpg

Компилятор VC9.

Примечание:
EasyPlaton, большое спасибо за такой подробный ответ! С добавлением конструктора копирования всё заработало.
Ответы:
Вы забыли реализовать конструктор копирования, который учавствует в создании копий объекта при передаче в функцию или возврате из неё, по значению (в обоих случаях).


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.