0

Да, я видел данный вопрос: https://ru.stackoverflow.com/questions/536546/Ссылка-на-неразрешенный-внешний-символ-возможные-причины, не помогло / не понял / не разобрался / много вариантов, видел множество других вопросов, у меня ошибки всего две, скорее всего однотипные, пж, можно немного конкретики? Ну тупой я для того, чтобы самому понять, какая из 10 разных проблем у меня


Так компилируется:

template <typename Ts>
class table
{
public:
    std::vector <Ts> data;
    std::string filename;
    table(std::string fn)
    {
        filename = fn;
    }
    ~table()
    {
        data.clear();
    }
};

Так не компилируется:

template <typename Ts>
class table
{
public:
    std::vector <Ts> data;
    std::string filename;
    table(std::string fn);
    ~table();
};

+

#include "Table.h"

template <typename Ts> table<Ts>::table(std::string fn) { filename = fn; }

template <typename Ts> table<Ts>::~table() { data.clear(); }

Никого не подчёркивает, но выдаёт такие вещи:

  • error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall table::table(class std::basic_string<char,struct std::char_traits,class std::allocator >)" (??0?$table@Uemployee@@@@QAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) в функции _main.
  • error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall table::~table(void)" (??1?$table@Uemployee@@@@QAE@XZ) в функции _main.

(на другие методы не ругается)
Какая-то тёмная магия, помогите в ней разобраться :\

sedo
  • 33
  • Шаблон — не класс, в нем нужно весь код класть в заголовочный файл. – VladD Jul 03 '20 at 19:34
  • @Harry: Вроде ж не дубликат? В том вопросе/ответе про шаблоны я не нашёл – VladD Jul 03 '20 at 19:36
  • @VladD *Неправильная реализация шаблонного кода.

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

    – Harry Jul 03 '20 at 19:38
  • @Harry: точно! Отсутствие практики сказывается :) – VladD Jul 03 '20 at 19:39
  • В похожем вопросе нет ответа на " почему реализация шаблонного кода С++ не может помещена в *.cpp файл,". Прочитайте https://overcoder.net/q/1528/%D0%BF%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B-%D0%BC%D0%BE%D0%B3%D1%83%D1%82-%D0%B1%D1%8B%D1%82%D1%8C-%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D1%8B-%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE-%D0%B2-%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%BE%D0%BC-%D1%84%D0%B0%D0%B9%D0%BB%D0%B5 – AR Hovsepyan Jul 03 '20 at 19:51

0 Answers0