0

Есть класс

class RegularUser : public User
{
public:
    RegularUser() {}
    ~RegularUser() {}
    template <class T>
    friend void print_u(T& obj);

и есть функция

template <class T>
void print_u(T& obj)
{
    cout << "Hello, world!\n";
}

Хочу сделать это функцию другом класса, но при вызове выдает ошибку

RegularUser user;
print_u(user);

Скорее всего вызываю не так, тк без вызова всё нормально

Ошибку выдает

error LNK2019: unresolved external symbol "void __cdecl print_u<class RegularUser>(class RegularUser &)" (??$print_u@VRegularUser@@@@YAXAAVRegularUser@@@Z) referenced in function _main

Проект разделен на 2 .cpp и 1 хедер, где описаны прототипы

Harry
  • 221,325
ccvhd
  • 744
  • https://ideone.com/Bz3lpe – Harry Dec 08 '19 at 18:13
  • Какую "ошибку"? Почему в вопросе не приведен полный текст сообщения об ошибке? – AnT stands with Russia Dec 08 '19 at 18:16
  • Ну нате в вижло: https://rextester.com/IUPTJ21023 – Harry Dec 08 '19 at 18:19
  • Нет, ну какого хрена опять САМОЕ ВАЖНОЕ в вопросе не сказано сразу?!!! – Harry Dec 08 '19 at 18:19
  • Определение функции в .cpp засунули? – AnT stands with Russia Dec 08 '19 at 18:20
  • @AnT Да, один cpp для мейна, другой для реализаций – ccvhd Dec 08 '19 at 18:20
  • В указаном вопросе, дублем которого является ваш, есть такая причина: *Неправильная реализация шаблонного кода.

    Например, реализация шаблонного кода помещена в .cpp файл, хотя она должна находиться полностью в подключаемом .h файле.*

    – Harry Dec 08 '19 at 18:21
  • Никакого отношения к friend ваш вопрос не имеет. – AnT stands with Russia Dec 08 '19 at 18:22
  • @Harry Да, прочитал уже, переместил в хедер и сработало – ccvhd Dec 08 '19 at 18:22
  • @AnT Ну на момент публикования вопроса, я думал, что дело именно во френд составляющей :/ – ccvhd Dec 08 '19 at 18:23

0 Answers0