Ошибка LNK2019 ссылка на неразрешенный внешний символ "void __cdecl SortTravelersList(struct Travelers * ,int (__cdecl)(struct Travelers *,struct Travelers *))" (?SortTravelersList@@YAXPAPAUTravelers@@P6AHPAU1@1@Z@Z) в функции _main.
#include<iostream>
using namespace std;
struct Travelers
{
int ticket_code;
string lastname;
int numberofthings;
int luggage_weight;
Travelers* Next;
};
Travelers* Head = 0;
struct Date {
int day;
int month;
int year;
Date* Next;
};
Date* Head2 = 0;
struct Date2 {
int day;
int month;
int year;
Date* Next;
};
Date* Head3 = 0;
void Insert_Traveler(Travelers** list, Travelers* t, unsigned int pos)
{
if (pos == 0 || *list == 0) {
t->Next = *list;
*list = t;
}
else if (pos == 0) {
t->Next = *list;
*list = t;
}
else {
Travelers* p = *list;
for (unsigned int i = 0; p->Next; i++, p = p->Next)
if (i == pos - 1)
break;
t->Next = p->Next;
p->Next = t;
}
}
Travelers* Choose_Travelers(Travelers* list, unsigned int pos)
{
while (list && pos)
{
list = list->Next;
--pos;
}
return list;
}
Travelers* Choose_NextAndBefore1(Travelers* list, unsigned int pos) {
return Choose_Travelers(list, pos + 1);
}
Travelers* Choose_NextAndBefore2(Travelers* list, unsigned int pos) {
return Choose_Travelers(list, pos - 1);
}
int Location(Travelers* list, string key) {
Travelers* p = list;
unsigned int n = 0;
for (; p; n++, p = p->Next) {
if (p->lastname == key) break;
}
return n;
}
Travelers* Delete_Traveler(Travelers** list, unsigned int pos)
{
Travelers* d = 0;
if (pos == 0) {
d = *list;
*list = d->Next;
}
else {
Travelers* p = *list;
for (unsigned int i = 0; p->Next; i++, p = p->Next)
if (i == pos - 1) {
d = p->Next;
p->Next = d->Next;
break;
}
}
return d;
}
void Print_Travelers(Travelers* list)
{
for (Travelers* p = list; p; p = p->Next)
cout << "code: " << p->ticket_code
<< " " << p->lastname
<< " nth: " << p->numberofthings
<< " weight: " << p->luggage_weight
<< '\n';
cout << '\n';
}
void Print_Date(Date* list) {
for (Date* p = list; p; p = p->Next)
cout << "day: " << p->day
<< " month: " << p->month
<< " year: " << p->year
<< '\n';
cout << '\n';
}
void Unite_Date(Date* head1, Date* head2)
{
Date* p = head1;
while (p->Next != NULL)
p = p->Next;
p->Next = head2;
}
Date* Find_Date(Date* list, size_t pos)
{
if (pos == 0 || !list)
return list;
while (list->Next && pos)
{
list = list->Next;
--pos;
}
return list;
}
void Insert_Date(Date** list, Date* pos, Date* item)
{
if (!pos)
{
item->Next = *list;
*list = item;
}
else
{
item->Next = pos->Next;
pos->Next = item;
}
}
void Insert_Date(Date** list, Date* t, size_t pos)
{
Insert_Date(list, Find_Date(*list, pos), t);
}
void SortTravelersList(Travelers** list, int (*cmpf)(Travelers* s1, Travelers* s2));
int cmpf_ticket(Travelers* s1, Travelers* s2) {
return s1->ticket_code - s2->ticket_code;
}
int cmpf_lastname(Travelers* s1, Travelers* s2) {
int rc = 0;
if (s1->lastname < s2->lastname)
rc = -1;
else if (s1->lastname > s2->lastname)
rc = 1;
return rc;
}
int main()
{
Date* q = new Date;
q->day = rand() % 30;
q->month = rand() % 12;
q->year = 2021;
Insert_Date(&Head2, q, 1);
Print_Date(Head2);
Date* w = new Date;
w->day = rand() % 30;
w->month = rand() % 12;
w->year = 2021;
Insert_Date(&Head3, w, 1);
Print_Date(Head3);
for (int i = 0; i < 10; i++) {
char nm[10];
Travelers* p = new Travelers;
p->ticket_code = rand() % 1000;
sprintf_s(nm, "tr_%d", i);
p->lastname = nm;
p->numberofthings = rand() % 5 + 1;
p->luggage_weight = (rand() % 10 + 1) * p->numberofthings;
Insert_Traveler(&Head, p, i);
}
cout << "list of travelers\n";
Print_Travelers(Head);
cout << "delete some travelers\n";
Travelers* p = Delete_Traveler(&Head, 9);
if (p) {
cout << "delete as pos " << 9 << " "
<< "code: " << p->ticket_code
<< " " << p->lastname
<< " nth: " << p->numberofthings
<< " weight: " << p->luggage_weight
<< '\n';
delete p;
}
for (int i = 0; i < 10; i++) {
p = Delete_Traveler(&Head, i);
if (p) {
cout << "delete as pos " << i << " "
<< "code: " << p->ticket_code
<< " " << p->lastname
<< " nth: " << p->numberofthings
<< " weight: " << p->luggage_weight
<< '\n';
delete p;
}
}
cout << "------\n";
cout << "\nlist of travelers after deletions\n";
Print_Travelers(Head);
int pos;
cout << "Choose index" << endl;
cin >> pos;
Travelers* k = Choose_Travelers(Head, pos);
if (!k)
std::cout << "NOT FOUND" << std::endl;
else
{
cout << "code: " << k->ticket_code
<< " " << k->lastname
<< " nth: " << k->numberofthings
<< " weight: " << k->luggage_weight
<< '\n';
}
cout << "Enter a key you want to choose" << endl;
string key;
cin >> key;
int t = Location(Head, key);
cout << t << endl;
int poss;
cout << "Choose index" << endl;
cin >> poss;
Travelers* e = Choose_NextAndBefore1(Head, poss);
if (!e)
std::cout << "NOT FOUND" << std::endl;
else
{
cout << "code: " << e->ticket_code
<< " " << e->lastname
<< " nth: " << e->numberofthings
<< " weight: " << e->luggage_weight
<< '\n';
}
Travelers* b = Choose_NextAndBefore2(Head, poss);
if (!b)
std::cout << "NOT FOUND" << std::endl;
else
{
cout << "code: " << b->ticket_code
<< " " << b->lastname
<< " nth: " << b->numberofthings
<< " weight: " << b->luggage_weight
<< '\n';
}
Unite_Date(Head2, Head3);
Print_Date(Head2);
SortTravelersList(&Head, cmpf_ticket);
Print_Travelers(Head);
}
SortTravelersList, делаю поиск по странице, вижу два - в сообщении об ошибке, одно - в объявлении функции, одно - в вызове. Что я не так написал? Где код этой функции? который я не заметил? – Harry Apr 04 '21 at 07:54void SortTravelersList(Travelers** list, int (*cmpf)(Travelers* s1, Travelers* s2));- два аргумента, вот вызов -SortTravelersList(&Head, cmpf_ticket);- тоже два. В вашем варианте не прошла бы компиляция, а тут - не идет ликновка – Harry Apr 04 '21 at 08:22dada dasdaуже хочет, чтобы мы всё написали. @Harry – AlexGlebe Apr 04 '21 at 08:24