Je suis un programmeur Java et C#. Récemment, je travaille sur un projet C++. J'ai un problème de comment écrire l'exemple de code suivant en C++. Le code exemple suivant est pour trier une propriété d'un struct:Structure de tri basée sur une propriété de C++
public struct Person
{
public string name;
public int age;
}
Ajouter des personnes à une liste et trier l'âge:
static void main()
{
List<Person> persons = new List<Person>();
Person person = new Person();
person.age = 10;
person.name = "Jane";
persons.Add(person);
person = new Person();
person.age = 13;
person.name = "Jack";
persons.Add(person);
person = new Person();
person.age = 12;
person.name = "Anna";
persons.Add(person);
// sort age
persons.Sort(delegate(Person p1, Person p2)
{ return p1.age.CompareTo(p2.age); });
persons.ForEach(delegate(Person p)
{ Console.WriteLine(String.Format("{0} {1}", p.age, p.name)); });
}
Comment puis-je écrire un code d'échantillon équivalent en C++?
Bonjour icecime, merci beaucoup pour vos solutions. J'ai vérifié les deux solutions mais la solution 2 est capable de compiler mais la solution 1 ne l'est pas. Je préfère toujours la première solution cependant. L'erreur de la première solution est la suivante: ISO C++ interdit de prendre l'adresse d'une fonction membre non statique ou parenthésée non statique pour former un pointeur vers la fonction membre. Dites '& XXX: compareAge'. – olidev
@JoesyXHN: c'est parce que vous avez ajouté 'compareAge' * dans la classe' Person', alors que je l'ai défini comme une fonction libre (* en dehors de la classe). – icecrime
oui, la solution 2 fonctionne parfaitement. Cependant, je voudrais savoir une méthode de comparaison normale de la solution 1. Cela ne fonctionne pas pour moi. Si je déclare à l'extérieur, je dois déclarer la structure comme publique. Mais c'est privé dans notre cas. De plus, j'ai essayé de le rendre public mais j'ai ensuite eu ce problème: Utilisation invalide du type incomplet 'const struct xxx: yyy: Person'. Je l'ai déjà déclaré comme une méthode gratuite. Merci d'avance – olidev