ку!
портирую консольное приложение [C++] из мира VC++ в вселенную g++/linux.
но сначала под виндой правлю — mingw 3.4.2.
компилирую g++ , опции -D «ля-ля-ля» идентичны.
компилятор M$ даже ворнингов не дает.
Итак код вызывает следующую ошибку :
..\include\classlib\Index Collection.h: In member function `Object* IndexCollection<object>::ObjectWithIndex(int)’:
..\include\classlib\Index Collection.h:34: error: `itemsInContainer' undeclared (first use this function)
..\include\classlib\Index Collection.h:34: error: (Each undeclared identifier is reported only once for each function it appears in.)
..\include\classlib\Index Collection.h:35: error: `Container' undeclared (first use this function)
..\include\classlib\Index Collection.h: In member function `Object* IndexCollection<object>::ObjectWithSubAndIndex(int, int)’:
..\include\classlib\Index Collection.h:40: error: `itemsInContainer' undeclared (first use this function)
..\include\classlib\Index Collection.h:41: error: `Container' undeclared (first use this function)
сосбтвенно код, вызывающий эту ошибку. он наследуется от шаблона (текст чуть ниже). там переменные (int itemsInContainer и указатель) объявлены и все должно наследоваться!
#ifndef _INDEX_COLLECTION_H
#define _INDEX_COLLECTION_H
#include «ACollect.h»
/////////////////////////////////////////////////////
// Класс-контейнер с индексацией
// Предполагается, что каждый элемент имеет поля Index и SubIndex
template class IndexCollection : public ACollection<object>
{
public:
IndexCollection(int Upper,int Delta) :
ACollection<object>(Upper,Delta){};
Object* ObjectWithIndex(int Index)
{ for( int i=0; i
if( (Container->Index) == Index )
return Container;
return (0L);
};
Object* ObjectWithSubAndIndex(int Index,int SubIndex)
{ for( int i=0; i
if( (Container->Index) == Index )
if( (Container->SubIndex) == SubIndex )
return Container;
return (0L);
};
};
#endif
вышеуказанный класс из Acollect.h, от кооторого наследуем:
template class EXPORT ACollection
{
public:
int itemsInContainer;
int Status;
ACollection(int Upper=5,int Delta=1);
~ACollection();
void Add( CONTAINER& );
void AddAt( CONTAINER&, int );
void PlaceAt( CONTAINER&, int );
void Detach( CONTAINER& );
void Detach( int i);
void Delete( int i);
void Flush();
int Find( const CONTAINER* );
CONTAINER& objectAt( int i ) const
{
return *Container[ i ];
}
CONTAINER *ptrAt( int i ) const
{
return Container[ i ];
}
CONTAINER& operator [] ( unsigned i ) const
{
return *Container[ i ];
}
protected:
void Reallocate( );
void SetData( int, CONTAINER* );
CONTAINER **Container;
int delta;//шаг увеличения размерности массива
int upperbound;//верхняя граница(посл. эт-т — upperbound-1)
};
почему g++ не компилирует такое ?
ведь в шаблоне объявлено все, почему же не наследуется ?!
</object>
</object>
</object>
</object>
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
template
Object* ObjectWithIndex(int Index)
вот так попробуй.