RedDevil |
Отправлено: 15.11.2005, 00:25 |
|
Не зарегистрирован
|
Помогите, pls! Я написал шаблон класса для динамического массива и сделал раздельную компиляцию(Unit2.cpp и Unit2.h).
Подключаю их к модулю Unit1.h(#include "Unit2.h" и #include "Unit2.cpp") и объявляю объект этого класса TDMassiv A(6)в классе формы TForm1, а Builder мне не разрешает.
Ошибки:[C++Error] Unit1.h(25): E2293 ) Expected и
[C++Error] Unit1.cpp(16): E2451 Undefined symbol 'A'.
Почему? Хотя, если объявить этот объект в ф-ии __fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)файла Unit1.cpp, то программа будет работать.
Но тогда нельзя будет использовать этот объект в других ф-иях, как void __fastcall TForm1::Button1Click(TObject *Sender). |
|
Asher |
Отправлено: 15.11.2005, 09:58 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Привет.
Люди! Пользуйтесь поиском. Он определенно рулит.
Шаблоны?
|
|
RedDevil |
Отправлено: 16.11.2005, 00:38 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 4
|
Спасибо за совет, но я заранее прочитал эти советы, поэтому и написал. Ведь я же подключаю *.cpp-файл, в который *.h-файл уже включен.
Тем более я пробовал писать все в *h.-файле — не получается.
Ошибки:[C++Error] Unit1.h(25): E2293 ) Expected и
[C++Error] Unit1.cpp(16): E2451 Undefined symbol 'A'.
Может быть ошибка где-то в классе:
Unit2.h
CODE |
template <typename T>
class TDMassiv
{
private:
unsigned int FCountItems;
void __fastcall SetCountItems(unsigned int value);
public:
__property unsigned int CountItems={read=FCountItems,write=SetCountItems};
T* Items;
TDMassiv(int a);
~TDMassiv();
T& TDMassiv::operator[] (unsigned int i);
};
//------------------------------------------------------------
Unit2.cpp
template <typename T>
void __fastcall TDMassiv<T>::SetCountItems(unsigned int value)
{
if(FCountItems!=value)
{
Items=(T*)realloc(Items,value*sizeof(T));
FCountItems=value;
}
}
//---------------------------------------------------------------------------
template <typename T>
TDMassiv<T>::TDMassiv(int a)
{
Items=(T*)calloc(a,sizeof(T));
FCountItems=a;
}
//---------------------------------------------------------------------------
template <typename T>
TDMassiv<T>::~TDMassiv()
{
free(Items);
}
//---------------------------------------------------------------------------
template <typename T>
T& TDMassiv<T>::operator[] (unsigned int i)
{
if(i>=CountItems)
throw Exception(("Dinamic Massive out of range. Index should be less than "+(AnsiString)CountItems));
return *(Items+i);
} |
Отредактировано Георгий — 16/11/2005, 02:16 |
|
Asher |
Отправлено: 16.11.2005, 09:05 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Привет.
Прочел еще раз. Теперь внимательно.
Указанная проблема не имеет никакого отношения к шаблонам.
Почитайте по области видимости и extern.
Когда указываете ошибки неплохо бы еще в листинге комментарием помечать соответствующую строку.
Номер компилятор Вам говорит.
А при создании неплохо бы указывать тип шабдлона, типа так:Ну почему никто тэги code не пишет...
Отредактировано Георгий — 16/11/2005, 23:19
|
|
RedDevil |
Отправлено: 18.11.2005, 00:45 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 4
|
Большое спасибо, Asher! Теперь все ясно. |
|