Вы можете сортировать с помощью java 8
yourList.sort(Comparator.comparing(Classname::getName));
or
yourList.stream().forEach(a -> a.getBObjects().sort(Comparator.comparing(Classname::getValue)));
Вы, которых любой имеет к
SetPersonName
определение .cpp файлу, компилируете и связываетесь с получающейся целью SetPersonName
встроенный , Это - известный случай Одного нарушения Правила Определения.
статическое ключевое слово делает связь функции внутренней т.е. только доступной единице перевода, в которую это включено. Это однако скрывает настоящую проблему. Я предложил бы, перемещают определение функции в ее собственный файл реализации, но сохраняют объявление в заголовке.
Когда Вы компилируете, Вы - библиотека, ее библиотечный файл содержит определение для SetPersonName. При компиляции программы, которая пользуется библиотекой, так как она включает заголовок, и Вы написали код, встроенный в заголовке, который она также компилирует в определении для SetPersonName. Два определения для той же функции (обычно) не позволяются. Статическое ключевое слово говорит компилятору, что функция не должна быть представлена за пределами текущей единицы перевода (дискретная часть кода, который Вы компилируете), таким образом, определение в библиотеке не видимо компоновщику.
соответствующее решение этой проблемы зависит от Ваших целей. Заголовочные файлы со статическими объявлениями функции почти никогда не, что Вы хотите. С точки зрения дизайна я рекомендовал бы избавиться от SetPersonName в целом и просто использовал бы Человека:: SetName.
Однако сбой, что, я реализовал бы его во многом как, Вы сделали для остальной части Вашей функциональности, объявлений в заголовке и реализации в .cpp. Подставляемые функции, связанные с библиотекой, будут иметь тенденцию уменьшать многие преимущества пользования библиотекой во-первых.
Решение состояло бы в том, чтобы сделать ту функцию статическим методом. Это остановит "уже определенные" ошибки.
Путем объявления функциональных помех Вы определяете объем его к текущей единице перевода, поэтому в действительности Вы добавили новую функцию SetPersonName в своем основном файле и назвали бы это не тем определенный в библиотеке.
правильное решение состоит в том, чтобы объявить SetPersonName как экстерна в person.h и реализовать его в person.cpp
Person.h
extern void SetPersonName(Person& person,const std::string name);
Person.cpp
void SetPersonName(Person& person,const std::string name)
{
person.SetName(name);
}
функциональный SetPersonName будет скомпилирован в каждый objectfile, который включает файл Person.h, таким образом делая компоновщика, видящего несколько функций и дающего ошибку.
Путем записи статичный Вы заявляете, что функция только будет видима в единственном objectfile. Вы все еще получите несколько функций в Вас двоичный файл, но теперь Вы не получите ошибки.
Попытка записать inline
перед функцией как
inline void SetPersonName(Person& person,const std::string name)
{
person.SetName(name);
}
..., потому что функция довольно проста, она в порядке, я думаю, чтобы иметь ее как встроенное. Встроенное поместит необходимый код, где функция используется, на самом деле не создавая функцию, которую назовут.