Как убрать ошибку линкера, при попытке описать конструктор шаблонного класса в .cpp?

Рейтинг: 1Ответов: 0Опубликовано: 25.03.2023

Столкнулся с такой проблемой. При попытке определить конструктор шаблонного класса в файле 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)

Ответы

Ответов пока нет.