Вот объясните, как научиться их понимать? Вот приведу пример кода, который не линкуется хэдэр mh.h Код (Text): template <class type, class size> class matrix { type *data; size m, n, mn; void error(char *msg); public: size getm() const; size getn() const; size getmn() const; matrix operator*(matrix &op2); matrix operator+(matrix &op2); matrix &operator=(matrix &op2); matrix &operator=(type &op2); type &matrix::operator()(size i, size j); type &matrix::operator[](size k); matrix(const matrix &obj); matrix(size m, size n); ~matrix(); }; код mc.cpp Код (Text): #include "mh.h" #include "mh.h" template <class type, class size> void matrix<type, size>::error(char *msg) { } template <class type, class size> matrix<type, size>::matrix(size _m_, size _n_) { m = _m_; n = _n_; mn = m * n; data = new type[mn]; if (!data) error("ololo"); } template <class type, class size> matrix<type, size>::~matrix() { delete[] data; } template <class type, class size> matrix<type, size>::matrix(const matrix<type, size> &obj) { size k; m = obj.getm(); n = obj.getn(); mn = obj.getmn(); data = new type[mn]; for (k = 0; k < mn; k++) data[k] = obj[k]; } template <class type, class size> matrix<type, size> &matrix<type, size>::operator=(matrix<type, size> &op2) { size k; for (k = 0; k < mn; k++) data[k] = op2[k]; return *this; } template <class type, class size> matrix<type, size> &matrix<type, size>::operator=(type &op2) { size k; for (k = 0; k < mn; k++) data[k] = op2; return *this; } template <class type, class size> type &matrix<type, size>::operator()(size i, size j) { return data[i * m + j]; } template <class type, class size> type &matrix<type, size>::operator[](size k) { return data[k]; } template <class type, class size> size matrix<type, size>::getm() const { return m; } template <class type, class size> size matrix<type, size>::getn() const { return n; } template <class type, class size> size matrix<type, size>::getmn() const { return mn; } template <class type, class size> matrix<type, size> matrix<type, size>::operator*(matrix &op2) { size i, j, k; type buf; buf = 0; matrix<type, size> result(m, op2.n); #ifdef SAFETY if (n != op2.m) { error("size error"); return result; } #endif for (i = 0; i < m; i++) for (j = 0; j < n; j++) { for (k = 0; k < n; k++) buf += data[i * m + k] * op2(k, j); result(i, j) = buf; } return result; } template <class type, class size> matrix<type, size> matrix<type, size>::operator+(matrix &op2) { size k; matrix<type, size> result; #ifdef SAFETY if (m != op2.getm() || n != op2.getn()) { error("error in summing matrixes"); return *this; } #endif for (k = 0; k < mn; k++) result[k] = data[k] + op2[k]; return result; } И точка входа sp.cpp Код (Text): #include "mh.h" int main() { matrix<int, int> object(6, 6); return 0; } Ну почему выходит вот что: Код (Text): 1>sp.obj : error LNK2019: unresolved external symbol "public: __thiscall matrix<int,int>::~matrix<int,int>(void)" (??1?$matrix@HH@@QAE@XZ) referenced in function _main 1>sp.obj : error LNK2019: unresolved external symbol "public: __thiscall matrix<int,int>::matrix<int,int>(int,int)" (??0?$matrix@HH@@QAE@HH@Z) referenced in function _main 1>I:\_______MY_PROJECT\training\Debug\training.exe : fatal error LNK1120: 2 unresolved externals
Очень надеюсь на вашу помощь, пишу БДЗ по сжатию изображений на графах без потерь, так я его написал, сдал, мне дали доп задание, и я решил перелопатить код, чтоб легче было кое-что модицифировать. То, что я кинул выше - маленький кусочек: реализация матрицы. И этот маленький паршивец не линкуется. Кому любопытно, могу весь код выложить.
У Вас объявлены (declared), но не определены (defined) конструкторы. Напишите код используемых методов, объявленных в заголовочных файлах (ie matrix(matrix &), matrix(int, int), getm(), getn()), и, возможно, всё скомпилируется.
реализация шаблонных методов должна быть видна в точке инстанцирования. короче, надо всё из mh.cpp перенести в mh.h