Форум программистов, компьютерный форум CyberForum.ru

Перегрузка операторов шаблонного класса дружественными функциями - C++

Восстановить пароль Регистрация
 
yuriillusion
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 9
27.03.2014, 19:08     Перегрузка операторов шаблонного класса дружественными функциями #1
При попытке скомпилировать проект выдаются следующие ошибки:

Error 1: error LNK2019: unresolved external symbol "class matrix<int> __cdecl operator+(class matrix<int> &,class matrix<int> &)" (??H@YA?AV?$matrix@H@@AAV0@0@Z) referenced in function _main

Error 2: error LNK1120: 1 unresolved externals

В исходном проекте также были внутренние методы класса - они стабильно работали. Все friend функции, описанные нижеприведённым способом, приводили к таким же ошибкам.

Почему возникают такие ошибки и как разрешить проблему?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
template <class T>
class matrix
{
    T** mtr;
public:
    int size;
    matrix(int _size);
    friend matrix operator + (matrix &m1, matrix &m2);
    T* operator [] (int adress);    
};
template <class T> matrix <T> ::matrix(int _size)
{
    size=_size;
    mtr=new T*[size];
    for(int i=0; i<size; i++)
        *(mtr+i)=new T[size];
    for(int i=0; i<size; i++)
        for(int j=0; j<size; j++)
        {
            mtr[i][j]=static_cast<T>(0);
        }
}
template <class T> T* matrix <T> :: operator [] (int adress)
{
    return mtr[adress];
}
template <class T> matrix <T> operator + (matrix <T> &m1, matrix <T> &m2)      //Не работает
{
    if(m1.size!=m2.size)
    {
        //throw (BadSize());
        matrix <T> B(1);
        return B;
    }
    int sz=m1.size;
    matrix <T> A(sz);
    for(int i=0; i<sz; i++)
        for(int j=i; j<sz; j++)
            A[i][j]=m1[i][j]+m2[i][j];
    return A;
}
int main()
{
    matrix <int> A(3);
    matrix <int> B(3);
    A+B;
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2014, 19:08     Перегрузка операторов шаблонного класса дружественными функциями
Посмотрите здесь:

Перегрузка оператора вывода на консоль для шаблонного класса C++
C++ Перегрузка операторов в шаблоне класса
[C++] перегрузка operator<< для шаблонного класса C++
C++ Перегрузка операторов для класса треугольника
Перегрузка << , >> для шаблонного класса C++
C++ Перегрузка оператора шаблонного класса в зависимости от типа
C++ Перегрузка оператора << шаблонного класса
Шаблон класса и перегрузка операторов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
27.03.2014, 19:35     Перегрузка операторов шаблонного класса дружественными функциями #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Объявление оператора дружественным надо делать полным, как шапка при определении.

C++
1
template<class T> friend matrix<T> operator+ (matrix<T> &m1, matrix<T> &m2);
А вообще у Липпмана советовали определять как член класса паблик оператор составного +, и оператор+ перегружать с его использованием.
Yandex
Объявления
27.03.2014, 19:35     Перегрузка операторов шаблонного класса дружественными функциями
Ответ Создать тему
Опции темы

Текущее время: 00:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru