0

У меня возникли проблемы с объявлением экземпляра класса.

Код:

//main.cpp
#include "klass.hpp"

int main(int argc, char** argv)
{    
   Klass<Type::Big>* klass = new Klass<Type::Big>();
}

//klass.hpp
#pragma once

enum class Type
{
Big,
Medium,
Small,
};

template<Type T>
class Klass
{
private:
public:
Klass(/* args */);
~Klass();
};

//klass.cpp
#include "klass.hpp"

#include <iostream>

template<Type T>
Klass<T>::Klass(/* args */)
{
   std::cout << "Hello from Klass class";
}

template<Type T>
Klass<T>::~Klass()
{ 

}

Компилирую с помощью:

g++ -std=c++17 -o test.exe .\main.cpp .\klass.cpp

Ошибка:

undefined reference to `Klass<(Type)0>::Klass()' collect2.exe: error: ld returned 1 exit status

Harry
  • 221,325
  • 3
    Шаблоны необходимо определять в заголовочном файле. – user7860670 Nov 05 '19 at 05:35
  • Или в klass.cpp сделать предварительное объявление template class Klass<Type::Big>;. Чтобы однозначно функции появились. – AlexGlebe Nov 05 '19 at 07:06

0 Answers0