nixp.ru v3.0

28 мая 2017,
воскресенье,
23:28:19 MSK

DevOps с компанией «Флант»
aslav написал 13 ноября 2006 года в 17:19 (532 просмотра) Ведет себя неопределенно; открыл 8 тем в форуме, оставил 2 комментария на сайте.

ку!

портирую консольное приложение [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>

metal

template

Object* ObjectWithIndex(int Index)

вот так попробуй.