Итак, эта часть кода является небольшой частью большого проекта. Я не могу скопировать весь проект, но на самом деле это всего лишь две строки, делающие ошибку. Я пытаюсь получить доступ к функции mergeSort из класса Metrics. Метрики - это другой класс, чем тот, к которому я пытаюсь получить доступ. Я определил mergeSort, а также #included Metrics в классе, с которым я работаю. Я также определил конструктор. Вот кусок кода:C++ LNK 2019 Ошибка с шаблонами/классами
void Document::createHashWords()
{
Node* heads[97];
string* allWords = parseWords();
int numWords = getdWordCt();
for (int i = 0; i < numWords; i++)
{
char* word = (char*)allWords[i].c_str();
int k = hashWord(word,97);
insertWord(heads,k,allWords[i]);
}
for (int i = 0; i < 97; i++)
{
Node* temp = heads[i];
int size = 0;
while (temp != NULL)
{
size++;
temp = temp->getNext();
}
int* countArr = new int[size];
temp = heads[i];
for (int i = 0; i < size; i++)
{
countArr[i] = temp->getCount();
temp = temp->getNext();
}
Metrics <int> toSort;
toSort.mergeSort(countArr,size);
}
}
Кодекс, что является причиной этой проблемы является последним 2: Metrics toSort и toSort.mergeSort (countArr, размер) ;.
Вот класс Метрики:
template <class T>
class Metrics
{
private:
int id;
public:
Metrics();
~Metrics();
void selectionSort(T *arr, int n);
void insertionSort(T *arr, int n);
void merge(T *a, int numA, T *b, int numB, T *c);
void mergeSort(T *arr, int n);
};
Я определил в слияние файле .cpp для этого класса.
Вот моя ошибка сборки:
1>Document.obj : error LNK2019: unresolved external symbol "public: __thiscall Metrics<int>::Metrics<int>(void)" ([email protected]@@[email protected]) referenced in function "public: void __thiscall Document::createHashWords(void)" ([email protected]@@QAEXXZ)
1>Document.obj : error LNK2019: unresolved external symbol "public: __thiscall Metrics<int>::~Metrics<int>(void)" ([email protected]@@[email protected]) referenced in function "public: void __thiscall Document::createHashWords(void)" ([email protected]@@QAEXXZ)
1>Document.obj : error LNK2019: unresolved external symbol "public: void __thiscall Metrics<int>::mergeSort(int *,int)" ([email protected][email protected]@@[email protected]) referenced in function "public: void __thiscall Document::createHashWords(void)" ([email protected]@@QAEXXZ)
1>C:\Users\Kevin\Documents\Visual Studio 2012\Projects\CMPSC 122 Checkpoint 2\Debug\CMPSC 122 Checkpoint 1.exe : fatal error LNK1120: 3 unresolved externals
Если удалить эти 2 строки, я могу составить штраф. Я просто не знаю, почему эти две строки ошибаются. Мне нужно получить доступ к этой функции из класса Metrics.
template <class T>
class Metrics
{
private:
int id;
public:
Metrics<T>() {}
~Metrics<T>() {}
void selectionSort(T *arr, int n);
void insertionSort(T *arr, int n);
void merge(T *a, int numA, T *b, int numB, T *c);
void mergeSort(T *arr, int n);
};
Так что это теперь мой Метрики класс:
template <class T>
class Metrics
{
private:
int id;
public:
Metrics() {}
~Metrics() {}
void selectionSort(T *arr, int n);
void insertionSort(T *arr, int n);
void merge(T *a, int numA, T *b, int numB, T *c);
void mergeSort(T *arr, int n);
};
Я закомментирована определения конструктора/деструктора в Metrics.cpp файл следующим образом:
//template <class T>
//Metrics<T>::Metrics()
//{
//}
//template <class T>
//Metrics<T>::~Metrics()
//{
//}
И теперь это мой код ошибки:
1> Document.obj: ошибка LNK2019: неразрешенный внешний символ "public: v oid __thiscall Метрики :: mergeSort (int *, int) "(? mergeSort @? $ Metrics @ H @@ QAEXPAHH @ Z), на которые ссылается функция« public: void __thiscall Document :: createHashWords (void) »(? createHashWords @ Document @ @QAEXXZ) 1> C: \ Users \ Kevin \ Documents \ Visual Studio 2012 \ Projects \ CMPSC 122 Checkpoint 2 \ Debug \ CMPSC 122 Checkpoint 1.exe: фатальная ошибка LNK1120: 1 неразрешенных внешних
Вам не нужно '' в классе. Так что просто «Метрики»() {} 'и т. Д. –
kec
Я так и делал это сейчас. Я добавил, что мой текущий класс метрик – user3421510
И теперь ваши ошибки разные. У вас, вероятно, такая же проблема с другими функциями. – kec