2015-10-23 2 views
0

Я делаю базовую установку на 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 

Мне сказали, что размещение какого-либо фактического кода в вашем заголовке ужасно, поэтому я ищу некоторые советы, как избежать этого при запуске этого кода. Спасибо.

ответ

0

Компилятор/линкер должен знать обо всех частях вашей программы. Один простой способ сделать это - скомпилировать оба исходных файла вместе, gcc main.cpp qsort.cpp, чтобы он передавал оба сгенерированных объектных файла в компоновщик.

Или, если вы компилируете отдельно, вам необходимо передать оба объектных файла в компоновщик.

+0

К сожалению, это в Visual Studio, поэтому я не думаю, что смогу скомпилировать их вместе. Что вы подразумеваете, передавая оба объектных файла в компоновщик? – WarSame

+0

'cl main.cpp qsort.cpp' то. Если вы используете IDE, у вас должны быть оба исходных файла, перечисленные в вашем проекте, и VC должен их комбинировать. Какой символ указан в неразрешенной внешней ошибке символа? – 1201ProgramAlarm

+0

Я не понимаю, как использовать эти команды в самом VS. Вы просто хотите, чтобы я запускал его из CL на файлы? И разве вы не должны включать заголовки, которые будут включать определения функций? Сообщение об ошибке: неразрешенный внешний символ "класс станд :: вектор > __cdecl QuickSort (класс станд :: вектор >)", а затем некоторые кучу других вещей в том же духе. Я изменил int [] на std :: vector для моего кода, поэтому ошибка говорит об этом. – WarSame

 Смежные вопросы

  • Нет связанных вопросов^_^