Ошибка LNK2019 и LNK2001, как их решить?

Линковшик выдает ошибку LNK2019 , нашел на какую именно строку он ругается:
Dub->PrintTree(Dub->GetRoot());
Dub объект класса Tree , а вот и сам ее метод PrintTree:
template<typename T>
void Tree<T>::PrintTree(Node * Root)
{
	int choise;
	cout << "Выбирете обход для вывода дерева:\n1. ЛКП\n2. КПЛ\n";
	cin >> choise;
	switch (choise)
	{
	case 1:
		TreePrintLKP(Root);
		break;
	case 2:
		TreePrintKPL(Root);
		break;
	default:
		cout << "Такого обхода не существует!";
		break;
	}
};

От куда такая ошибка?

А вот насчет LNK2001 , ничего мне не известно. Вот скрин с ошибкой :
5d21d0594c8f3722449534.png
  • Вопрос задан
  • 1477 просмотров
Решения вопроса 1
reverse_kacejot
@reverse_kacejot
Junior C++ Developer, bachelor of Applied Math
Скорее всего инстанцирование класса находится в одной единице трансляции, а определение функции - в другой.
Поскольку код функции генерируется во время инстанцирования класса, то на момент инстанцирования компилятор должен знать какой тип "подставить" в функцию. Если определение находится в другой единице трансляции, то у компилятора, который компилирует файл с объявлением, нет возможности сгенерировать нужную функцию.

После компиляции, линкер пытается решить зависимости и не находит нужную функцию, потому что она не сгенерировалась.

Чтобы избежать этого, поместите определение функции в хедер с объявлением.
Вот похожая проблема.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы