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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
uropyxa
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 5
#1

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

21.12.2010, 17:49. Просмотров 889. Ответов 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, в основной программе создать экзепляр, такая же ошибка.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2010, 17:49     Подскажите по классам в Visual Studio c++
Посмотрите здесь:

Visual Studio перестал показывать дополнения к классам - C++
Не знаю куда правильно задать вопрос, но программирую я на C++. Вопрос по Visual Studio. Сломалась функция показа возможных методов для...

Ребяята подскажите, у меня вопро по Visual studio - C++
Подскажите для Visual Studio 2010 нужно что то устанавливать? Библиотека там.... потому что уу меня не запускается даже Hello world(((

Проблема с работой в Visual Studio, я новичок, подскажите) - C++
Помогите пожалуйста с Visual studio у меня такая проблема я пишу программу она выдает в моем коде такие то ошибки но не показывает где они...

Люди подскажите какой Microsoft Visual Studio 2010 вы используете? - C++
Значит проблема такая поставил Microsoft Visual Studio 2010 Express. Очень многие коды не работают. Вообще в чем проблема. Может другую...

Подскажите сайт с уроками по OpenGL для Visual Studio 2010 Express - C++
Нашёл сайт www.pmg.org.ru,но ничего не понял.Как создать Win32 приложение(у меня только проект Win32)?Где меню Project/setting(у меня...

Подскажите в чём ошибка ? Ошибок 6! Писал в Microsoft visual studio 2015 - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using std::cout; using std::cin; using std::endl; int main(); { ...

Подскажите литературу по классам - C++
здравствуйте! подскажите пожалуйста где можно найти и изучить самую простенькую программу на &quot;Классы&quot; в качестве примера ? вообщем чем...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
21.12.2010, 18:00     Подскажите по классам в Visual Studio c++ #2
Цитата Сообщение от uropyxa Посмотреть сообщение
раскидать в заголовочный файл и cpp
А вы в .cpp файле включали заголовок?
C++
1
#include "Matrix.h"
В заголовочном файле надо добавить защиту от повторной компиляции. MSVSC++ поддерживает
C++
1
#pragma once
.
uropyxa
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 5
21.12.2010, 18:26  [ТС]     Подскажите по классам в Visual Studio c++ #3
Да нет, здесь я ошибиться не должен, это сдандартное консольное приложении win32 (visual studio express 2008), там через #include "StdAfx.h" (в нем уже #include "Matrix.h") все подключено, в .h файле есть #pragma once, это все компилятором предусмотрено (хотя и попробовал в cpp написать #include "Matrix.h"- не вышло все равно). я пробовал и пример другого шаблона (если писать просто одном файлом с основной программой, то компилируется, если раскидывать, то нет) .
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
21.12.2010, 19:05     Подскажите по классам в Visual Studio c++ #4
uropyxa, Нету экспорта шаблонов в С++ практически. Пишите в 1 файле. Или же в cpp файле с определением шаблонного класса должны быть все функции, включая главную.
uropyxa
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 5
21.12.2010, 19:59  [ТС]     Подскажите по классам в Visual Studio c++ #5
ForEveR, спасибо. Не подскажите где в интернетах про экспорт шаблонов написано просто и четко?
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
21.12.2010, 20:05     Подскажите по классам в Visual Studio c++ #6
uropyxa, Его просто нету. До С++0x его и не будет. Он поддерживался только одним компилятором, каким точно не помню.
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
21.12.2010, 22:46     Подскажите по классам в Visual Studio c++ #7
Как-то упустил из виду, что говорится про шаблоны.
Если есть Matrix.h и Matrix.cpp, есть "кривые" выходы.
1. Добавить в файл, использующий CMatric
C++
1
2
#include "Matrix.h"
#include "Matrix.cpp";
2. Добавить инклуд Matrix.cpp в конец Matrix.h
C++
1
2
3
4
  ...
}; // конец объявления класса
 
#include "Matrix.cpp"
;
3. Слить все в один файл Matrix.h. Удобнее всего.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2010, 19:36     Подскажите по классам в Visual Studio c++
Еще ссылки по теме:

Win32 с++ visual studio - C++
Есть Visual Studio 2008. Хочу написать приложение win32 (не .NET) с кнопками, лейблами и т.д.. Подкажите, литературу или что почитать....

strcat в Visual Studio c++ - C++
const char uri= &quot;path&quot;; hFind = FindFirstFile((LPCWSTR)uri, &amp;FFD); ..... HANDLE hFile =...

Массивы в Visual Studio - C++
Столкнулся с проблемой. Visual Studio выдает ошибки: e:\проекты\array test\array test\main.cpp(8): error C2057: требуется константное...

Visual studio и istream_iterator - C++
проблема в том, что visual studio 2013 не хочет вводить из файла строки в вектор строк с помощью istream_iterator. Причем, с остальными...

Visual Studio .Net - C++
Здравствуйте ув. пользователи форума!Не давно начал изучать язык C++ по книге &quot;Visual C++&quot; для чайников , авторы Хаймен М., Арнсон...


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

Или воспользуйтесь поиском по форуму:
uropyxa
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 5
22.12.2010, 19:36  [ТС]     Подскажите по классам в Visual Studio c++ #8
помогло вот что: добавил в основную программу #include "Matrix.cpp" и компилируется.
Всем спасибо за советы!!!
Yandex
Объявления
22.12.2010, 19:36     Подскажите по классам в Visual Studio c++
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru