Ламер (редкий) |
Отправлено: 05.02.2004, 17:38 |
|
Не зарегистрирован
|
Заголовок выглядит вот так:
#ifndef __MATRIX_H
#define __MATRIX_H
template class TMatrix
{
protected:
TYPE **matrix;
int cols;
int rows;
public:
void SetCell(TYPE Value, int Col,int Row);
TYPE GetCell(int Col,int Row);
int GetRowCount();
int GetColCount();
virtual void SetDimension(int ColCount,int RowCount);
virtual void ResetDimension(int AddCol,int AddRow, bool Preserve=true);
public:
TMatrix(int ColCount,int RowCount);
TMatrix();
~TMatrix();
};
#endif
Реализацию приводить не буду, скажу лишь, что с компиляцией модуля
проблем не возникло.
А теперь вот тестовое приложение:
#include
#include "Matrix.h"
#pragma hdrstop
#include "UMatrixTest.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TMatrix Matrix(StrToInt(Edit1->Text),StrToInt(Edit2->Text));
for(int i=0;iText);i++)
{
for(int j=0;jText);j++)
{
Matrix.SetCell(StrToFloat(Edit3->Text),i,j);
}
}
int x=4*Matrix.GetCell(StrToInt(Edit1->Text)-2,StrToInt(Edit2->Text)-1);
ShowMessage(StrToInt(x));
}
Компиляция прошла успешно, а вот компоновщик обругал по полной
программе:
[Linker Error] Unresolved external 'TMatrix::~TMatrix()' referenced from C:\PROJECTS\MATRIXTEST\UMATRIXTEST.OBJ
... и далее в таком же духе.
Так как с английским у меня, скажем так, туговато, не понял ни черта.
Господа програмеры, если кто знает, чего линкеру не нравится, поделитесь вашим мнением. Заранее благодарен....
|
|
Beast |
Отправлено: 05.02.2004, 17:49 |
|
Не зарегистрирован
|
По-моему ваш код должен выглядеть вот так:
TMatrix Matrix(StrToInt(Edit1->Text),StrToInt(Edit2->Text));
for(int i=0;iText);i++)
{
for(int j=0;jText);j++)
{
Matrix.SetCell(StrToFloat(Edit3->Text),i,j);
}
}
int x=4*Matrix.GetCell(StrToInt(Edit1->Text)-2,StrToInt(Edit2->Text)-1);
ShowMessage(IntToStr(x));
странно как это компилятор вас не обругал |
|
Valdemar |
Отправлено: 06.02.2004, 08:52 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
А у вас реализация шаблона где находится? Она должна быть в h-файле. |
|
Asher |
Отправлено: 06.02.2004, 10:17 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Здарвствуйте.
Хотя по стандарту и можно разделять шаблоны на .h и .cpp файлы (см. Страуструпа Глава 13.7 (спец. издание)), но в реальности компиляторы (в силу каких-то своих внутренних причин ) это не поддерживают. Во всяком случае Builder 5 и MS VC++ 6.
так что как написал Valdemar придется отказаться от .cpp и весь код, вместе с реализацией, поместить в .h .
|
|
Ламер (редкий) |
Отправлено: 06.02.2004, 10:33 |
|
Не зарегистрирован
|
Благодарю за сотрудничество |
|
|