Compiler schmeisst fehler raus,templates classen & vecto

  • Compiler schmeisst fehler raus,templates classen & vecto

    jo hallo also hier der code...


    Quellcode

    1. #include <iostream>
    2. #include <string>
    3. #include <vector>
    4. using namespace std;
    5. class Student
    6. {
    7. public:
    8. Student();
    9. Student(const string& name, const int age);
    10. Student(const Student& rhs);
    11. ~Student();
    12. void SetName(const string& name);
    13. string GetName() const;
    14. void SetAge(const int age);
    15. int GetAge() const;
    16. Student& operator=(const Student& rhs);
    17. private:
    18. string itsName;
    19. int itsAge;
    20. };
    21. Student::Student()
    22. : itsName("Neuer Schueler"),itsAge(16)
    23. {}
    24. Student::Student(const string& name, const int age)
    25. : itsName(name),itsAge(age)
    26. {}
    27. Student::Student(const Student& rhs)
    28. :itsName(rhs.GetName()),itsAge(rhs.GetAge())
    29. {}
    30. Student::~Student()
    31. {}
    32. void Student::SetName(const string& name)
    33. {
    34. itsName=name;
    35. }
    36. string Student::GetName() const
    37. {
    38. return itsName;
    39. }
    40. void Student::SetAge(const int age)
    41. {
    42. itsAge=age;
    43. }
    44. int Student::GetAge() const
    45. {
    46. return itsAge;
    47. }
    48. Student& Student::operator=(const Student& rhs)
    49. {
    50. itsName=rhs.GetName();
    51. itsAge=rhs.GetAge();
    52. return *this;
    53. }
    54. ostream& operator<<(ostream& os,const Student& rhs)
    55. {
    56. os<<rhs.GetName()<<" ist "<<rhs.GetAge()<<" Jahre alt";
    57. return os;
    58. }
    59. template<class T>
    60. void ShowVector(const vector<T>& v);
    61. typedef vector<Student> SchoolClass;
    62. int main()
    63. {
    64. Student Harry;
    65. Student Sally("Sally",15);
    66. Student Bill("Bill",17);
    67. Student Peter("Peter",16);
    68. SchoolClass EmptyClass;
    69. cout <<"Leere Klasse:\n";
    70. ShowVector(EmptyClass);
    71. SchoolClass GrowingClass(3);
    72. cout << "Wachsende Klasse(3):\n";
    73. ShowVector(GrowingClass);
    74. GrowingClass[0]=Harry;
    75. GrowingClass[1]=Sally;
    76. GrowingClass[2]=Bill;
    77. cout<<" WachsendeKlasse(3) nach Zuweisung von Schuelern:\n";
    78. ShowVector(GrowingClass);
    79. GrowingClass.push_back(Peter);
    80. cout<<"Wachsende KLasse nach Zuweisung des 4ten Schuelers\n:";
    81. ShowVector(GrowingClass);
    82. GrowingClass[0].SetName("Harry");
    83. GrowingClass[0].SetAge(18);
    84. cout<<"Wachsende Klasse nach eintragung des namens\n:";
    85. ShowVector(GrowingClass);
    86. return 0;
    87. }
    88. template<class T>
    89. void ShowVector(const vector<T>& v)
    90. {
    91. unsigned int i;
    92. cout<<"max_size()=" << v.max_size();
    93. cout<<"\tsize()="<<v.size();
    94. cout<<"\tcapacity()="<<v.capacity();
    95. cout<<"\t"<<(v.empty()? "leer":"nicht leer");
    96. cout<<"\n";
    97. for( i=0;i<v.size();++i)
    98. cout << v[i]<<"\n";
    99. cout<<endl;
    100. }
    Alles anzeigen


    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)
    {

    Quellcode

    1. unsigned int i;

    cout<<"max_size()=" << v.max_size();
    cout<<"\tsize()="<<v.

    zu:
    void ShowVector(const vector<T>& v)
    {

    Quellcode

    1. 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 here

    testclass.cpp:119: warning: comparison between signed and unsigned integer
    expressions


    testclass.exe - 1 error(s), 1 warning(s)


    hmmmmm,.... wieso?? wie änder ich das ab???
    also ich benutze MinGW Dev Studio...

    thx for help :D
  • Zu deinem Linkerfehler kann ich leider nichts sagen, aber dazu
    testclass.cpp:119: warning: comparison between signed and unsigned integer

    Ein signed und ein unsigned int haben beide 32Bit - klar, oder?
    Beispiel:

    Quellcode

    1. int i = -1; // signed (-2Mrd - +2Mrd)
    2. unsigned int j = -1; // unsigned (>= 0)
    3. --> j ist eigentlich nicht -1 sondern 0xffffffff

    Mit der Warning will dich der Compiler nur darauf hinweisen....
  • Hi,
    ist der Code von da oben wirklich exakt der Code mit dem du diese Fehlermeldungen bekommst?
    Hab das ganze mit MinGW/VC++ 8 und Comeau durchlaufen lassen und keinerlei Fehler bekommen.
    Hast du eventuell irgendwelche wilden Compiler/Linkereinstellungen?

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • das mit dem signed und unsignet das das highbit nur das signum bestimmt ist klar, aber das prob ist das dennoch zwei völlig verschiedene fehlermeldungen auftauchen mit denen ich nüx anfangen kann. ...

    ne, linkereinstellungen habe ich keine,... in einem anderen board hat es auch jemand ohne fehler compiliert,..


    :?: hilfe und thx

    _________________________________________________________________
    edit:
    also mit visual c++ express funzt dit,.. aber wieso net mit MinGW??
    edit2:
    und mit dev-c++ 4.9.9.... auch...
    hmmm :?: