Я делаю базовую установку на C++. Существует главный файл, который вызывает функцию quickSort из другого файла, qSort.h/qSort.cpp. Однако, когда я пытаюсь сделать это, я получаю неразрешенный внешний символ, а это значит, что прототип функции виден, но не само определение функции. Тем не менее, когда я перемещаю функцию quickSort в заголовок, тогда она работает просто отлично, поэтому это должна быть проблема распознавания определения функции.Неразрешенный внешний символ с нормальной настройкой заголовка/источника
Заголовок QSort выглядит следующим образом:
#ifndef __qSort_h__
#define __qSort_h__
int quickSort(int * inputArray);
#endif
Источник QSort выглядит (пусто теперь, как я могу это исправить):
#include "qSort.h"
int quickSort(int * inputArray){
return 4;
}
И это называется просто в моем главном файле, как:
std::cout << quickSort(arrayInput);
и включены в основной исходный файл с:
#include "qSort.h"
#include "SortingPractice.h"
#define ARRAY_LENGTH 20
Мне сказали, что размещение какого-либо фактического кода в вашем заголовке ужасно, поэтому я ищу некоторые советы, как избежать этого при запуске этого кода. Спасибо.
К сожалению, это в Visual Studio, поэтому я не думаю, что смогу скомпилировать их вместе. Что вы подразумеваете, передавая оба объектных файла в компоновщик? – WarSame
'cl main.cpp qsort.cpp' то. Если вы используете IDE, у вас должны быть оба исходных файла, перечисленные в вашем проекте, и VC должен их комбинировать. Какой символ указан в неразрешенной внешней ошибке символа? – 1201ProgramAlarm
Я не понимаю, как использовать эти команды в самом VS. Вы просто хотите, чтобы я запускал его из CL на файлы? И разве вы не должны включать заголовки, которые будут включать определения функций? Сообщение об ошибке: неразрешенный внешний символ "класс станд :: вектор> __cdecl QuickSort (класс станд :: вектор >)", а затем некоторые кучу других вещей в том же духе. Я изменил int [] на std :: vector для моего кода, поэтому ошибка говорит об этом. –
WarSame