Как убрать ошибку линкера, при попытке описать конструктор шаблонного класса в .cpp?
Столкнулся с такой проблемой. При попытке определить конструктор шаблонного класса в файле array.cpp, компилятор выдает такую ошибку: "неопределённая ссылка на «Array::Array(int)»"; "clang-15: error: linker command failed with exit code 1 (use -v to see invocation)". Однако если класс делать не шаблонным, то все работает.
Файл main.cpp:
#include <iostream>
#include"../headers/array.h"
int main(int, char**) {
std::cout << "Hello, world!\n";
Array<int> array(5);
}
Файл array.h:
#pragma once
template<class Type>
class Array
{
public:
Array(int lenght);
Array(const Type* Array);
};
Файл array.cpp:
#include"../headers/array.h"
#include <iostream>
template<class Type>
Array<Type>::Array(int lenght)
{
std::cout << "Hello From constructor\n";
}
template<class Type>
Array<Type>::Array(const Type* array)
{
std::cout << "Hello from constructor\n";
}
На всякий случай файл CMakeLists.txt:
cmake_minimum_required(VERSION 3.0.0)
project(laba3 VERSION 0.1.0)
include_directories(include/headers)
add_executable(laba3 src/main.cpp)
add_library(array src/array.cpp)
target_link_libraries(laba3 array)
Источник: Stack Overflow на русском