Compiler schmeisst fehler raus,templates classen & vectoren
-
jo hallo also hier der code...
#include <iostream> #include <string> #include <vector> using namespace std; class Student { public: Student(); Student(const string& name, const int age); Student(const Student& rhs); ~Student(); void SetName(const string& name); string GetName() const; void SetAge(const int age); int GetAge() const; Student& operator=(const Student& rhs); private: string itsName; int itsAge; }; Student::Student() : itsName("Neuer Schueler"),itsAge(16) {} Student::Student(const string& name, const int age) : itsName(name),itsAge(age) {} Student::Student(const Student& rhs) :itsName(rhs.GetName()),itsAge(rhs.GetAge()) {} Student::~Student() {} void Student::SetName(const string& name) { itsName=name; } string Student::GetName() const { return itsName; } void Student::SetAge(const int age) { itsAge=age; } int Student::GetAge() const { return itsAge; } Student& Student::operator=(const Student& rhs) { itsName=rhs.GetName(); itsAge=rhs.GetAge(); return *this; } ostream& operator<<(ostream& os,const Student& rhs) { os<<rhs.GetName()<<" ist "<<rhs.GetAge()<<" Jahre alt"; return os; } template<class T> void ShowVector(const vector<T>& v); typedef vector<Student> SchoolClass; int main() { Student Harry; Student Sally("Sally",15); Student Bill("Bill",17); Student Peter("Peter",16); SchoolClass EmptyClass; cout <<"Leere Klasse:\n"; ShowVector(EmptyClass); SchoolClass GrowingClass(3); cout << "Wachsende Klasse(3):\n"; ShowVector(GrowingClass); GrowingClass[0]=Harry; GrowingClass[1]=Sally; GrowingClass[2]=Bill; cout<<" WachsendeKlasse(3) nach Zuweisung von Schuelern:\n"; ShowVector(GrowingClass); GrowingClass.push_back(Peter); cout<<"Wachsende KLasse nach Zuweisung des 4ten Schuelers\n:"; ShowVector(GrowingClass); GrowingClass[0].SetName("Harry"); GrowingClass[0].SetAge(18); cout<<"Wachsende Klasse nach eintragung des namens\n:"; ShowVector(GrowingClass); return 0; } template<class T> void ShowVector(const vector<T>& v) { unsigned int i; cout<<"max_size()=" << v.max_size(); cout<<"\tsize()="<<v.size(); cout<<"\tcapacity()="<<v.capacity(); cout<<"\t"<<(v.empty()? "leer":"nicht leer"); cout<<"\n"; for( i=0;i<v.size();++i) cout << v[i]<<"\n"; cout<<endl; }da schmeisst der compiler folgenden fehler raus:
Linking...
C:\...\testclass\Debug\testclass.o(.text$_ZNSt14__simple_allocI7StudentSt24__default_alloc_templateILb1ELi0EEE10deallocateEPS0_j+0x1d): In function `ZN7StudentC2Ev':
C:\...\testclass\testclass.cpp:26: undefined reference to `std::__default_alloc_template<true, 0>::deallocate(void*, unsigned)'
C:\...\testclass\Debug\testclass.o(.text$_ZNSt14__simple_allocI7StudentSt24__default_alloc_templateILb1ELi0EEE8allocateEj+0x1d):C:\Dokumente und Einstellungen\Tutor\Desktop\svn\transistor_kennlinien\testclass\testclass.cpp:26: undefined reference to `std::__default_alloc_template<true, 0>::allocate(unsigned)'
testclass.exe - 2 error(s), 0 warning(s)
ändere ich folgendes:
void ShowVector(const vector<T>& v)
{unsigned int i;cout<<"max_size()=" << v.max_size();
cout<<"\tsize()="<<v.zu:
void ShowVector(const vector<T>& v)
{signed int i;cout<<"max_size()=" << v.max_size();
cout<<"\tsize()="<<v.
bekomme ich folgenden fehler:Compiling source file(s)...
testclass.cpp
testclass.cpp: In function `void ShowVector(const std::vector<T,
std::allocator<_CharT> >&) [with T = Student]':
testclass.cpp:86: instantiated from heretestclass.cpp:119: warning: comparison between signed and unsigned integer
expressionstestclass.exe - 1 error(s), 1 warning(s)
hmmmmm,.... wieso?? wie änder ich das ab???
also ich benutze MinGW Dev Studio...thx for help

-
Der Code kompiliert bei mir mit dem gcc 3.4.6 fehlerfrei.
-
Der erste Fehler ist offensichtlich ein Link-Fehler (d.h. der Code wurde bereits erfolgreich compiliert). Deine Änderungen haben einen Compile-Fehler erzeugt, so daß es überhaupt nicht mehr zum Linken kommt.
-
wenn der erste ein linkfehler ist, wie was muss ich da neu verlinken??
thx & mfg :xmas2:
-
kann mir keiner helfe???

-
Definier mal deine template-Funktion "ShowVector" vor der Benutzung, also vor der "main"-Funktion
-
k,. also aus:
template<class T> void ShowVector(const vector<T>& v); typedef vector<Student> SchoolClass; int main() {...wurde jetzt:
template<class T> void ShowVector(const vector<T>& v) { unsigned int i; cout<<"max_size()=" << v.max_size(); cout<<"\tsize()="<<v.size(); cout<<"\tcapacity()="<<v.capacity(); cout<<"\t"<<(v.empty()? "leer":"nicht leer"); cout<<"\n"; for( i=0;i<v.size();++i) cout << v[i]<<"\n"; cout<<endl; } typedef vector<Student> SchoolClass; int main() {...folgender fehler taucht auf:
--------------------Configuration: testclass - Debug--------------------
Compiling source file(s)...
testclass.cpp
Linking...
C:\Dokumente und Einstellungen\Tutor\Desktop\svn\transistor_kennlinien\testclass\Debug\testclass.o(.text\_ZNSt14\_\_simple\_allocI7StudentSt24\_\_default\_alloc\_templateILb1ELi0EEE10deallocateEPS0\_j+0x1d): In function `ZN7StudentC2Ev': C:\\Dokumente und Einstellungen\\Tutor\\Desktop\\svn\\transistor\_kennlinien\\testclass\\testclass.cpp:26: undefined reference to `std::\_\_default\_alloc\_template::deallocate(void*, unsigned)' C:\\Dokumente und Einstellungen\\Tutor\\Desktop\\svn\\transistor\_kennlinien\\testclass\\Debug\\testclass.o(.text_ZNSt14__simple_allocI7StudentSt24__default_alloc_templateILb1ELi0EEE8allocateEj+0x1d):C:\Dokumente und Einstellungen\Tutor\Desktop\svn\transistor_kennlinien\testclass\testclass.cpp:26: undefined reference to `std::__default_alloc_template<true, 0>::allocate(unsigned)' testclass.exe - 2 error(s), 0 warning(s)
wobei die fehlermeldung sich auf zeile 26 bezieht:
Student::Student() : itsName("Neuer Schueler"),itsAge(16) {}hmmmm.....

____________________________________________________________________________-
edit:
also mit visual c++ express funzt ditte,.. aber why net minGW??
edit2:
und mit dev-c++ 4.9.9 auch... hmmmm