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

Ссылка на неразрешенный внешний символ - C++

Восстановить пароль Регистрация
 
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
01.04.2014, 18:02     Ссылка на неразрешенный внешний символ #1
Ошибки:
1>Щербаков 2.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall matrix<int>::~matrix<int>(void)" (??1?$matrix@H@@QAE@XZ) в функции _main
1>Щербаков 2.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall matrix<int>::matrix<int>(void)" (??0?$matrix@H@@QAE@XZ) в функции _main

Но конструктор и деструктор определены, откуда такие ошибки?

matrix.h:
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
#pragma once
 
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
#include <conio.h>
#include <iomanip>
using std::setw;
 
template <class Type>
class matrix
{
public:
    matrix();
    ~matrix();
 
    void read();
    void print() const;
    void getRows();
    void getColms();
 
    Type operator()(int, int) const ;
    void operator += (const matrix &);
    void operator -= (const matrix &);
    void operator *= (const matrix &);
 
private:
    void clear();
 
    Type **matr;
    int rows,colms;
};
matrix.cpp:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include "matrix.h"
 
template <class Type>
matrix<Type>::matrix()
{
    rows = 0;
    colms = 0;
    matr = NULL;
    cout << "Создана матрица 0х0\n\n";
}
 
template <class Type>
matrix<Type>::~matrix()
{
    clear();
    cout << "Матрица удалена\n\n";
}
 
template <class Type>
void matrix<Type>::clear()
{
    if (matr != NULL)
    {
        for (int i = 0; i < rows; i++)
            delete [] matr[i];
        delete [] matr;
    }
    cout << "Память освобождена\n\n";
}
 
template <class Type>
void matrix<Type>::read()
{
    rows = getRows();
    colms = getColms();
 
    clear();
    matr = new Type*[rows];
    cout << "Введите матрицу:\n";
    for (int i = 0; i < rows; i++)
    {
        matrix[i] = new Type[colms];
        for (int j = 0; j < colms; j++)
            cin >> matr[i][j];
    }
    cout << endl;
}
 
template <class Type>
void matrix<Type>::getRows()
{
    do
    {
        cout << "Введите количество строк: ";
        cin >> rows;
    }
    while (rows <= 0);
    cout << endl;
}
 
template <class Type>
void matrix<Type>::getColms()
{
    do
    {
        cout << "Введите количество столбцов: ";
        cin >> colms;
    }
    while (colms <= 0);
    cout << endl;
}
 
template <class Type>
void matrix<Type>::print() const
{
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < colms; j++)
            cout << setw(4) << matr[i][j];
        cout << endl;
    }
    cout << endl;
}
 
template <class Type>
Type matrix<Type>::operator()(int row, int col) const
{
    return matr[row][col];
}
 
template <class Type>
void matrix<Type>::operator += (const matrix &right)
{
    if (rows != right.rows || colms != right.colms)
    {
        cout << "Размеры матриц не совпадают!\n\n";
        getch();
        return;
    }
    for (int i = 0; i < rows; i++)
        for (int j = 0; j < colms; j++)
            matr[i][j] += right.matr[i][j];
    cout << "Сложение прошло успешно\n\n";
}
 
template <class Type>
void matrix<Type>::operator -= (const matrix &right)
{
    if (rows != right.rows || colms != right.colms)
    {
        cout << "Размеры матриц не совпадают!\n\n";
        getch();
        return;
    }
    for (int i = 0; i < rows; i++)
        for (int j = 0; j < colms; j++)
            matr[i][j] -= right.matr[i][j];
    cout << "Вычитание прошло успешно\n\n";
}
 
template <class Type>
void matrix<Type>::operator *= (const matrix &right)
{
    if (colms != right.rows)
    {
        cout << "Количество столбцов в первой матрице не совпадает с количеством столбцов во второй матрице!\n\n";
        return;
    }
 
    Type res;
    for (int i = 0; i < rows; i++)
        for (int j = 0; j < colms; j++)
        {
            for (int ii = 0, res = 0; ii < rows; ii++)
                res += matr[i][ii] + right[ii][j];
            matr[i][j] = res;
        };
    cout << "Умножение прошло успешно\n\n";
}
Щербаков 2.cpp:
C++
1
2
3
4
5
6
7
8
9
#include "matrix.h"
 
int main()
{
    setlocale(LC_ALL,"rus");
    matrix<int> obj;
    getch();
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2014, 18:02     Ссылка на неразрешенный внешний символ
Посмотрите здесь:

C++ Ссылка на неразрешенный внешний символ
Ссылка на неразрешенный внешний символ C++
C++ Ссылка на неразрешенный внешний символ
C++ ССылка на неразрешенный внешний символ
Ссылка на неразрешенный внешний символ C++
Ссылка на неразрешенный внешний символ C++
C++ Ссылка на неразрешенный внешний символ
C++ Ссылка на неразрешенный внешний символ

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.04.2014, 18:08     Ссылка на неразрешенный внешний символ #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Керра, реализацию шаблонных функций следует перенести в заголовочный файл.
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
01.04.2014, 18:20  [ТС]     Ссылка на неразрешенный внешний символ #3
Благодарю
Yandex
Объявления
01.04.2014, 18:20     Ссылка на неразрешенный внешний символ
Ответ Создать тему
Опции темы

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