Hello,
i get some error while compiling the following little stl demo.
first the errors:
g++ -o stldemo stldemo.cpp
stldemo.cpp: In function `bool operator<(mark&, mark&)':
stldemo.cpp:20: cannot convert `bool' to `const char*' for argument `1' to `int
strcmp(const char*, const char*)'
/usr/include/c++/3.2/bits/stl_algo.h: In function `const _Tp&
std::__median(const _Tp&, const _Tp&, const _Tp&) [with _Tp = mark]':
/usr/include/c++/3.2/bits/stl_algo.h:2118: instantiated from `void std::__introsort_loop(_RandomAccessIter, _RandomAccessIter, _Size) [with _RandomAccessIter = __gnu_cxx::__normal_iterator<mark*, std::vector<mark, std::allocator<mark> > >, _Size =
int]'
/usr/include/c++/3.2/bits/stl_algo.h:2178: instantiated from `void std::sort(_RandomAccessIter, _RandomAccessIter) [with _RandomAccessIter = __gnu_cxx::__normal_iterator<mark*, std::vector<mark, std::allocator<mark> > >]'
stldemo.cpp:61: instantiated from here
/usr/include/c++/3.2/bits/stl_algo.h:90: no match for `const mark& < const
mark&' operator
stldemo.cpp:19: candidates are: bool operator<(mark&, mark&)
...
And here is the programm:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct mark
{
char name[50];
unsigned short mk;
};
void putmk(mark &m)
{
cout << m.name << ": " << m.mk << "\n";
}
bool operator < (mark &m1, mark &m2) // Vergleichsoperator < für Sortierung
{
if (strcmp(m1.name < m2.name) < 0)
return (true);
return (false);
}
int main(void)
{
vector <mark> a(2);
vector <mark> b(3);
// Werte in Container übertragen
strcpy(a[0].name, "Caesar");
strcpy(a[1].name, "Berta");
strcpy(a[2].name, "Anton");
strcpy(a[3].name, "Emil");
strcpy(a[4].name, "Dora");
a[0].mk = 5;
a[1].mk = 4;
b[0].mk = 3;
b[1].mk = 2;
b[2].mk = 1;
cout << "Kurs A: " << a.size() << " Teilnehmer. "
<< "Maximale T-Zahl: " << a.max_size() << "\n";
cout << "Kurs B: " << b.size() << " Teilnehmer. "
<< "Maximale T-Zahl: " << b.max_size() << "\n";
cout << "\nKurs A:\n";
for_each(a.begin(), a.end(), putmk); // for_each: STL - Schleifenersatz
cout << "\nKurs B:\n";
for_each(b.begin(), b.end(), putmk);
cout << "Teilnehmertausch";
a.swap(b); // swap: Containerinhalte vertauschen
sort(a.begin(), a.end()); // Sortieren für Vergleichsoperationen
sort(b.begin(), b.end());
cout << "\nKurs A neu:\n";
for_each(a.begin(), a.end(), putmk);
cout << "\nKurs B neu:\n";
for_each(b.begin(), b.end(), putmk);
cout << "Kurs B in umgekehrter Reihenfolge:\n";
for_each(b.rbegin(), b.rend(), putmk); // rückwärtszählender Iterator (Zeiger auf Containerelement)
}
I need help, please.
Why do i get these errors?
Perhaps forgotten linking a library?
greetings,
hampel