Я работал над проектом для моего класса колледжа, который использует классы на c ++, к сожалению, каждый раз, когда я пытаюсь вызвать функцию, которой передают параметры в моем классе, программа не может скомпилировать с двумя следующими ошибками:
Ошибка LNK2019: неразрешенный внешний символ "int __cdecl binsearch (класс Course * * const, int, char * const)" (? Binsearch @@ YAHQAPAVCourse @@ HQAD@Z), на который имеется ссылка в функции _main Project1 C : \ Users \ cvos \ source \ repos \ Project1 \ Project1 \ courses_main.obj 1
и
Ошибка LNK1120 1 неразрешенных внешних объектов Project1 C: \ Users \ cvos \ source \ repos \ Project1 \ Debug \ Project1.exe 1
Я рассмотрел проблемы LNK, и большинство результатов показывают, что это связано с символами в c ++ против c (Это исправление) не работает) или что существует проблема со связыванием файлов в пределах Visual Studio (это исправление также не сработало), и, наконец, это было связано с необходимостью быть в консольной подсистеме (Wh ich это уже было).
Странно то, что, если я закомментирую свои вызовы всех функций, которые я сделал в классе «Курс» и которым передаются параметры, программа работает нормально. Только когда я пытаюсь использовать функции, созданные в классе «Курс», программа не запускается, из-за чего я сильно подозреваю, что я делаю что-то не так с тем, как я передаю переменные своим функциям-членам.
Я опубликую соответствующие части моего кода:
В моем заголовочном файле "courses.h" я объявляю свою функцию:
int binsearch(Course* co_ptr[], int size, char search[]);
В моем втором исходном файле "courses_functions . cpp "Я определяю функцию:
int Course::binsearch(Course* co_ptr[], int size, char search[])
{
int low = 0, high = size - 1, first_index = -1, last_index = -1, num_of_entries = 0;
while (low <= high)
{
int mid = (low + high) / 2;
if (co_ptr[mid]->name == search)
{
bool found = false;
int i = mid;
while (!found) //Check values below mid
{
if (co_ptr[i]->name == search)
{
first_index = i; //first_index now holds a potential first occurence of our name
if (i == 0)
{
found = true;
}
}
else
{
found = true;
}
i--; //decrement i and check again.
}
i = mid; //Reset i
found = false; //Reset found
while (!found) //Check values above mid
{
if (co_ptr[i]->name == search)
{
last_index = i; //last_index now holds a potential last occurence of our name
if (i == size - 1)
{
found = true;
}
}
else
{
found = true;
}
i++; //increment i and check again.
}
break; //Breaks us out of the main while loop
}
else if (co_ptr[mid]->name < search)
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
if ((first_index != -1) && (last_index != -1))
{
for (int i = first_index; i <= last_index; i++)
{
std::cout << "\nEntry found: "
<< std::endl << co_ptr[i]->name << ' ' << co_ptr[i]->units << " units, grade:" << co_ptr[i]->grade;
num_of_entries++;
}
return num_of_entries;
}
else
{
std::cout << "\nEntry not found.";
return num_of_entries;
}
}
Наконец, в моем основном исходном файле" courses_main. cpp "Я вызываю функцию:
else if (selection == 3) //Display a course
{
char title[50] = "";
int results = 0;
std::cout << "\nEnter a class to search for: ";
std::cin.getline(title, 50, '\n');
std::cin.ignore();
results = binsearch(courses, size, title);
}
Как это для класс колледжа, я не собираюсь использовать какие-либо альтернативные методы, я в основном пытаюсь выяснить, почему метод, который я использую, вернул бы ошибки, о которых я рассказывал выше, но я с удовольствием выложу больше фрагментов своего кода, если он необходимо.
Спасибо!