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:
Code:
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:
Code:
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
Lesezeichen