PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Migration GCC 3.3 -> GCC 3.4?



7.e.Q
19-04-2005, 06:08
Da die Migration eines meiner Programme von GCC 3.3 auf GCC 3.4 nun mehr in den programmiertechnischen Bereich fällt, stelle ich meine weiteren Fragen jetzt hier:

folgendes Konstrukt meckert der 3.4er GCC, im Gegensatz zum 3.3er GCC:



template<class TYPE, class ARG_TYPE>
class CArray : public vector<TYPE>
{
public:
void SetSize(int size, int grow=0)
{
m_size=size;
resize(size); // Zeile 139
}
int GetSize() const { return size(); } // Zeile 141
void RemoveAt(int idx)
{
typename CArray::iterator i=begin(); // Zeile 144
i=i+idx;
erase(i);
}
void InsertAt(int idx, TYPE o)
{
typename CArray::iterator i=begin(); // Zeile 150
i=i+idx;
insert(i,o);
}

void RemoveAll()
{
clear();
SetSize(m_size);
}

/*void print()
{
int z=0; printf("CArray (%i) (%i):\n",size(),capacity());
for(iterator i=begin(); i!=end(); i++) {
printf("[%i]=%i\n",z,(*i)); z++;
}
}*/

int m_size;
};


Die Übersetzung dieser Klasse liefert folgende Fehlermeldungen:



In file included from CGProcess.h:13,
from CSysUnit.h:10,
from CInfoServer.h:8,
from CBGInfo.h:15,
from CBGInfo.cxx:1:
idffile.h: In member function `void CArray<TYPE, ARG_TYPE>::SetSize(int, int)':
idffile.h:139: error: there are no arguments to `resize' that depend on a template parameter, so a declaration of `resize' must be available
idffile.h:139: error: (if you use `-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
idffile.h: In member function `int CArray<TYPE, ARG_TYPE>::GetSize() const':
idffile.h:141: error: there are no arguments to `size' that depend on a template parameter, so a declaration of `size' must be available
idffile.h: In member function `void CArray<TYPE, ARG_TYPE>::RemoveAt(int)':
idffile.h:144: error: there are no arguments to `begin' that depend on a template parameter, so a declaration of `begin' must be available
idffile.h: In member function `void CArray<TYPE, ARG_TYPE>::InsertAt(int, TYPE)':
idffile.h:150: error: there are no arguments to `begin' that depend on a template parameter, so a declaration of `begin' must be available
make: *** [obj/CBGInfo.o] Interrupt


Kann mir einer sagen, wie man das jetzt im neuen Compiler macht? Der alte akzeptiert das so und funktioniert damit auch! Bitte um schnelle Antwort!
Danke

Gruß, Hendrik

SeeksTheMoon
19-04-2005, 08:17
http://gcc.gnu.org/gcc-3.4/changes.html#cplusplus, das könnte der 4. Punkt sein, probiers mal.

7.e.Q
22-04-2005, 08:49
jupp, das war's. Danke (ishrtfm... *mpf*)