Пятница, 29 Ноября 2024, 19:44

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблема с присваиванием.
ТехникДата: Среда, 30 Марта 2011, 14:17 | Сообщение # 1
Глава X-ray Games
Сейчас нет на сайте
Пишу класс матрицы размерностью 3 на 3. Через перегрузку операций реализовал присваивание значений одной матрицы другой. Ниже приведен код. Проблема возникает на стадии тестирования, присваиваю матрицу с некими значениями результирующей, вывожу значения последней на экран. Все эл-ты матрицы равны -1.07374е+008. Все элементы типа float.
Code

void Matrix3::operator =(const Matrix3& m3)  
{
  Matrix3 _m3;

  _m3.m[0][0] = m3.m[0][0]; _m3.m[0][1] = m3.m[0][1]; _m3.m[0][0] = m3.m[0][2];
  _m3.m[0][1] = m3.m[1][0]; _m3.m[0][0] = m3.m[1][1]; _m3.m[0][1] = m3.m[1][2];  
  _m3.m[0][0] = m3.m[2][0]; _m3.m[0][1] = m3.m[2][1];    _m3.m[0][0] = m3.m[2][2];
}
ArchidoДата: Среда, 30 Марта 2011, 16:29 | Сообщение # 2
Сэнсэй
Сейчас нет на сайте
Техник
Телепаты в отпуске, давай полный листинг, хотя...

Зачем ты объявил на стеке матрицу, которая после выхода из функции просто удаляется... ?
Либо пиши в конце функции *this = _m3, либо (лучше) вообще убери _m3 из кода... Оно не надо, т.к. ты должен присваивать значения локальному классу, в котором определена эта функция.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
nilremДата: Среда, 30 Марта 2011, 17:00 | Сообщение # 3
Просветленный разум
Сейчас нет на сайте
Quote (Archido)
void Matrix3::operator =(const Matrix3& m3)

А чего оно ничего не возвращает?

Ага, в общем читай про перегрузку оператора присваивания.


Windmill 2

WindMill 2D Game Engine
ArchidoДата: Среда, 30 Марта 2011, 18:11 | Сообщение # 4
Сэнсэй
Сейчас нет на сайте
Quote (nilrem)
А чего оно ничего не возвращает?

А оно и не должно ничего возвращать.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ТехникДата: Четверг, 31 Марта 2011, 12:53 | Сообщение # 5
Глава X-ray Games
Сейчас нет на сайте
Спасибо за советы. Но проблема крылась в моей невнимательности, все реализовал без всяких локальных матриц, и ошибка из-за бездумного копипаста для ускорения работы. Написал было первую строку, а потом вставив оставшиеся забыл их переделать. Ниже код, переписанный мною сегодня утром, все работает без проблем.
Code

void Matrix3::operator =(const Matrix3& m3)  
{
  m[0][0] = m3.m[0][0]; m[0][1] = m3.m[0][1]; m[0][2] = m3.m[0][2];
  m[1][0] = m3.m[1][0]; m[1][1] = m3.m[1][1]; m[1][2] = m3.m[1][2];
  m[2][0] = m3.m[2][0]; m[2][1] = m3.m[2][1]; m[2][2] = m3.m[2][2];

}
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг