Перейти к содержимому


Фото

О LNK2001: неразрешенный внешний символ


  • Чтобы отвечать, сперва войдите на форум
9 ответов в теме

#1 гык-sse2 Опубликовано 14 Сентябрь 2010 - 15:02

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев
В Visual Studio 2008 принят другой подход не только к шаблона, но и к прототипам.
Как известно, прототипы функций необязательны. Их можно не писать, если тело вызываемой функции в файле расположено до ее вызова. Вот почему мои матрицы работали - это чистая случайность, что у меня так расположено.

В Borland C++ достаточно внутри класса написать
friend CMatrix operator+ (CMatrix,CMatrix);
. В связи с изменениями в шаблонах, нужно после + дописать еще и <t>. Но прототипом функции это не является! Это только указывает на то, что если есть такая функция, то ей можно лазить по private членам. Поэтому нужно дополнительно написать
template <class t>
CMatrix<t> operator+ (CMatrix<t>,CMatrix<t>);
Это прототип.

Изменено: iMichael, 14 Сентябрь 2010 - 15:02

Медведь громит каны!

#2 KiberGus Опубликовано 14 Сентябрь 2010 - 16:37

KiberGus
  • Genius loci
  • 6 561 Сообщений:
  • Алексей Гусейнов
А ты не хочешь сделать operator+ методом класса CMatrix?
Зато, обладая единственной в мире подводной орбитальной группировкой спутников глонасс...
gentoo.gif

#3 гык-sse2 Опубликовано 14 Сентябрь 2010 - 16:59

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев

А ты не хочешь сделать operator+ методом класса CMatrix?

Первоначально так и было, но Марианна Константиновна заставила переделать на friend=)
Ошибки-то у меня нет, а у всех остальных есть)

Изменено: iMichael, 14 Сентябрь 2010 - 16:59

Медведь громит каны!

#4 гык-sse2 Опубликовано 14 Сентябрь 2010 - 17:11

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев
Да, если есть прототип, то friend тоже надо писать. А то спрашивали. И не внутри прототипа, а в классе.
Медведь громит каны!

#5 Syrano Опубликовано 14 Сентябрь 2010 - 18:25

Syrano
  • Свои
  • 9 630 Сообщений:
  • Владимир Зайцев

Да, если есть прототип, то friend тоже надо писать. А то спрашивали. И не внутри прототипа, а в классе.

А, простите, friend вне класса -- он чей друг? ;-)

С нами сила Алхазашвили!


#6 KiberGus Опубликовано 14 Сентябрь 2010 - 18:57

KiberGus
  • Genius loci
  • 6 561 Сообщений:
  • Алексей Гусейнов

А, простите, friend вне класса -- он чей друг? ;-)

Это абстрактный друг. Про него можно стихи писать. В коментариях.
Зато, обладая единственной в мире подводной орбитальной группировкой спутников глонасс...
gentoo.gif

#7 Vasay Опубликовано 14 Сентябрь 2010 - 19:06

Vasay
  • Свои
  • 3 760 Сообщений:
  • Василий Ломакин

Первоначально так и было, но Марианна Константиновна заставила переделать на friend=)

Вообще говоря, в этом есть смысл. Не всякий оператор можно реализовать как метод класса, например, оператор вычитания объекта из константы или из объекта другого класса. А хорошо, когда все операторы реализованы единообразно.
Я всё отдам за продолжение пути.

#8 koraalex Опубликовано 14 Сентябрь 2010 - 20:10

koraalex
  • Свои
  • 1 946 Сообщений:
  • Алексей Коробов

Не всякий оператор можно реализовать как метод класса, например, оператор вычитания объекта из константы или из объекта другого класса.

У меня, как смолтокера, потемнело в глазах. Брукс привёл правильную выдержку из чей-то критики в своей книге: ООП не смогло кардинально преобразить программирование из-за того, что большинство восприняло его как новую технологию программирования, в то время как это методика проектирования. - Не надо гнаться за наименьшим временем исполнения алгоритма и всяческими изворотливыми программистскими решениями. Программирования - это низший уровень, технарский. Простите, но как бы кому-либо здесь ни нравилось решать программистские задачки, это не должно становится самоцелью, ибо это сродни фанатизму, особенно свойственному математикам и физикам-теоретикам с математическим уклоном. Живите в реальности и решайте практические, полезные задачи, суть которых завязана на природе вещей, а не на умственных метаморфозах. Ещё раз простите на нравоучения, не сдержался. Возможно, я не к месту возник.

Изменено: koraalex, 14 Сентябрь 2010 - 21:02


#9 гык-sse2 Опубликовано 15 Сентябрь 2010 - 15:45

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев

А, простите, friend вне класса -- он чей друг? ;-)

Ну, с человеческой точки зрения, он друг того же класса, ведь мы пишем friend PTMatrix. Но это ошибка. Просто спрашивали, почему ошибка friend not allowed outside class-definition, я и объяснил.
Медведь громит каны!

#10 гык-sse2 Опубликовано 15 Сентябрь 2010 - 15:51

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев

Программирования - это низший уровень, технарский. Простите, но как бы кому-либо здесь ни нравилось решать программистские задачки, это не должно становится самоцелью, ибо это сродни фанатизму, особенно свойственному математикам и физикам-теоретикам с математическим уклоном.

Так тут в данный момент самоцель - не матрицы, а научиться работать в VS.
Как программисты любят BC... За что?
Медведь громит каны!




1 пользователей читают эту тему

0 пользователей, 1 гостей, 0 невидимых