Błędy podczas kompilacji programu z funkcją sort.

0

Hej, mam taki kod programu.

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
 
struct person {
	string name;
	int age;
};
typedef person const &person_view;
 
namespace compare_person {
	bool by_age(person_view lhs, person_view rhs) {
		return lhs.age < rhs.age;
	}
}
 
int main() {
	person people[] = {
		{"Jasiek ", 8},
		{"Stasiek", 32},
		{"Piotrek", 16},
		{"Pawel", 11}
	};
 
	sort(begin(people), end(people), compare_person::by_age);
 
	for(person_view person: people) {
		cout << person.name << ": " << person.age << "\n";
	}
 
	return 0;
}
 

Kompilator daje mi następujące błędy:

user image

Całkowicie nie rozumiem, co mam teraz zrobić, żeby program został skompilowany poprawnie? Pomożecie odszukać błędy?

2

Zapewne begin() i end() to jakieś makra bądź funkcje, które są niedostępne dla Twojej wersji kompilatora. Możesz wskazać początkowy adres i jednostkę dalej za końcem tablicy, czyli:

sort(people,
	people + sizeof people / sizeof *people,
	compare_person::by_age);
 

edit:

A jednak to chodzi o standard języka: http://en.cppreference.com/w/cpp/iterator/begin

0

Chodzi o coś takiego?

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
 
struct person {
	string name;
	int age;
};
typedef person const &person_view;
 
namespace compare_person {
	bool by_age(person_view lhs, person_view rhs) {
		return lhs.age < rhs.age;
	}
}
 
int main() {
	person people[] = {
		{"Jasiek ", 26},
		{"Stasiek", 53},
		{"Piotrek", 16},
		{"Pawel", 19}
	};
 
	sort(people, people + sizeof people / sizeof *people,compare_person::by_age);
 
	for(person_view person: people) {
		cout << person.name << ": " << person.age << "\n";
	}
 
	return 0;
}

Kompilator nadal krzyczy!

user image

1

Wg mnie się kompiluje: http://ideone.com/s5Lx34

1 użytkowników online, w tym zalogowanych: 0, gości: 1