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

Подскажите по классам в Visual Studio c++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычесть из положительных элементов массива элемент с номером k1, а к отрицательным прибавить элемент с номером k2, нулевые элементы оставить без измен http://www.cyberforum.ru/cpp-beginners/thread216820.html
Вычесть из положительных элементов массива элемент с номером k1, а к отрицательным прибавить элемент с номером k2, нулевые элементы оставить без изменения. Указания: номера k1 и k2 вводятся с клавиатуры.
C++ Определить, сколько делителей у вводимого числа, и вывести сами делители определить сколько и каких делителей у вводимого числа http://www.cyberforum.ru/cpp-beginners/thread216814.html
C++ Стандартная библиотека C++ и STL
Вот нашел такие строки в книге Эккеля "Философия С++" Контейнеры и алгоритмы стандартной библиотеки С++ не редко путают с объектами библиотеки STL....//...между стандартной библиотекой С++ и библиотекой STL существует множество тонких различий. Таким образом, несмотря на популярность этого заблуждения, STL не является частью стандартной библиотеки С++. Путаница возникает довольно часто, потому...
C++ Программа объединения двух целочисленных массивов
Очень жду помощи) составление и компиляция программ обработки строк и массивов с помощью пакета MASM32. 1. Написать программу объединения двух целочисленных массивов с использованием команды MOVSB. Необходимо учесть, что результирующий массив должен иметь размер, как минимум равный сумме размеров объединяемых массивов. 2. Удалить среднюю букву при нечетной длине строки и две средние буквы...
C++ Как использовать таймер http://www.cyberforum.ru/cpp-beginners/thread216787.html
Здравствуйте, господа. Можно ли каким-либо образом использовать таймер в программе вообще? Увидел описание таймера, однако не нашёл timer.h. Мне необходимо, чтобы программа в том случае, если пользователь ничего не делает опр. промежуток времени в течение getch (), выдавала сообщение. Заранее благодарю за возможные ответы.
C++ количество элементов в массиве встречающихся 2 раза дан одномерный массив состоящий из N элементов. Выяснить количество элементов в массиве А встречающихся более 2-х раз. подробнее

Показать сообщение отдельно
uropyxa
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 5

Подскажите по классам в Visual Studio c++ - C++

21.12.2010, 17:49. Просмотров 874. Ответов 7
Метки (Все метки)

Я новичек(). Проблема такая: допустим есть код, в котором объявлен класс матриц (CMatrix) как шаблон (template <class T>), с методами инициализации, заполения рандомом и перегрузкой операторов. Все ок. Все работает:

template <class T>
class CMatrix
{
T **matr;

int m_in,
m_im;

public:
CMatrix(int, int);
~CMatrix();

void Init();
void InitRandom();

CMatrix<T> &operator + (CMatrix <T>&b);
CMatrix<T> &operator - (CMatrix <T>&b);
};

template <class T>
CMatrix<T>::CMatrix(int n, int m)
{
m_in = n;
m_im = m;
matr = NULL;
Init();
}

template <class T>
CMatrix<T>::~CMatrix()
{

}

template <class T>
void CMatrix<T>::Init()
{
if (matr == NULL) {
matr = new T *[m_in];
for ( int i = 0; i < m_in; i ++)
matr[i] = new T[m_im];
}
}


template <class T>
void CMatrix<T>::InitRandom()
{
srand(time(NULL));
for (int i = 0; i < m_in; i++)
for (int j = 0; j < m_im; j++)
*(*(matr+i)+ j)= rand() % 10;

}


template <class T>
CMatrix<T> &CMatrix<T>::operator + (CMatrix<T> &b)
{
CMatrix c(m_in, m_im);
for (int i = 0; i < m_in; i++)
for (int j = 0; j < m_im; j++)
c.matr[i][j] = this->matr[i][j] + b.matr[i][j];
return c;
}

template <class T>
CMatrix<T> &CMatrix<T>::operator - (CMatrix <T>&b)
{
CMatrix c(m_in, m_im);
for (int i = 0; i < m_in; i++)
for (int j = 0; j < m_im; j++)
c.matr[i][j] = this->matr[i][j] - b.matr[i][j];

return c;
}


int main()
{
CMatrix <int> A(5,5);
CMatrix <int> B(5,5);
CMatrix <int> C(5,5);
A.Init();
B.Init();
C.Init();
A.InitRandom();
B.InitRandom();
C.InitRandom();
C = A + B;
return 0;
}

Но если добавить в проекте класс с++ и переместить объявление класс в header (Matrix.h):

template <class T>
class CMatrix
{
T **matr;

int m_in,
m_im;

public:
CMatrix(int, int);
~CMatrix(void);


void Init();
void InitRandom();


CMatrix<T> &operator + (CMatrix <T>&b);
CMatrix<T> &operator - (CMatrix <T>&b);

};

А реализцию в cpp файл (Matrix.cpp):
template <class T>
CMatrix<T>::CMatrix(int n, int m)
{
m_in = n;
m_im = m;
matr = NULL;
Init();
}

template <class T>
CMatrix<T>::~CMatrix(void)
{

}

template <class T>
void CMatrix<T>::Init()
{
if (matr == NULL) {
matr = new T *[m_in];
for ( int i = 0; i < m_in; i ++)
matr[i] = new T[m_im];
}
}


template <class T>
void CMatrix<T>::InitRandom()
{
srand(time(NULL));
for (int i = 0; i < m_in; i++)
for (int j = 0; j < m_im; j++)
*(*(matr+i)+ j)= rand() % 10;
}


template <class T>
CMatrix<T> &CMatrix<T>::operator + (CMatrix<T> &b)
{
CMatrix c(m_in, m_im);
for (int i = 0; i < m_in; i++)
for (int j = 0; j < m_im; j++)
c.matr[i][j] = this->matr[i][j] + b.matr[i][j];
return c;
}

template <class T>
CMatrix<T> &CMatrix<T>::operator - (CMatrix <T>&b)
{
CMatrix c(m_in, m_im);
for (int i = 0; i < m_in; i++)
for (int j = 0; j < m_im; j++)
c.matr[i][j] = this->matr[i][j] - b.matr[i][j];

return c;
}

То в основной программе:
#include "Matrix.h"
int main()
{
CMatrix <int> A(5,5);
CMatrix <int> B(5,5);
CMatrix <int> C(5,5);
A.Init();
B.Init();
C.Init();
A.InitRandom();
B.InitRandom();
C.InitRandom();
C = A + B;
return 0;
}
не компилируется с ошибкой
error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall CMatrix<int>::~CMatrix<int>(void)" (??1?$CMatrix@H@@QAE@XZ) в функции _wmain
error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall CMatrix<int>::CMatrix<int>(int,int)" (??0?$CMatrix@H@@QAE@HH@Z) в функции _wmain
Ошибка с констуктором и деструктором (как я догадываюсь).
Если кто знает в чем проблема, подсакажите пжлста.
Пробовал пример с msdn шаблона (работает , если одним файлом) также раскидать в заголовочный файл и cpp, в основной программе создать экзепляр, такая же ошибка.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru