170 похожих чатов

Я впервые столкнулся с такой проблемкой: Возникли ошибки линковки - не

могу разобраться по какой причине:

1) Error LNK2019 unresolved external symbol "public: unsigned int __cdecl array<int,4>::getSize(void)const " (?getSize@?$array@H$03@@QEBAIXZ) referenced in function main

2) Error LNK1120 1 unresolved external

Понятное дело, что у меня эти ошибки возникают из-за шаблонов, но возможно я как-то не так сделал реализацию?
Может быть стоит перенести реализацию методов класса в hpp файл - но стараюсь соблюдать стандарт архитектуры файлов - в hpp (forward declarations), а в cpp(definition);

----------Файл СMakeLists.txt:---------------
Файл CMakeLists.txt:
cmake_minimum_required (VERSION 3.12)

Project (DSA)

set (SOURCES
src/main.cpp
src/array.cpp
)

set (HEADERS
include/main.hpp
include/array.hpp
)

add_executable (DSA ${SOURCES} ${HEADERS})

target_include_directories (DSA PRIVATE include)

set (CMAKE_CXX_STANDARD 20)
set (CMAKE_CXX_REQUIRED ON)

file (WRITE "${CMAKE_CURRENT_SOURCE_DIR}/.gitignore" "# /build\n")
---------------------------------------------
----------Файл array.hpp:--------------------
Файл array.hpp:
#ifndef ARRAY_HPP
#define ARRAY_HPP

/*
READ O(1)
WRITE O(1)
INSERT O(n)
DELETE O(n)
*/

template <typename Type, size_t Size>
class array {
public:
Type arr[Size];

size_t getSize() const;
private:
};

#endif // ARRAY_HPP

файл array.cpp:
#include "array.hpp"

template <typename Type, size_t Size>
size_t array <Type, Size> :: getSize() const { return Size; }
---------------------------------------------
----------Файл array.cpp:--------------------
#include "array.hpp"

template <typename Type, size_t Size>
size_t array <Type, Size> :: getSize() const { return Size; }
---------------------------------------------
----------Файл main.hpp:---------------------
#ifndef MAIN_HPP
#define MAIN_HPP

#include <iostream>
#include "array.hpp"

#endif // MAIN_HPP
---------------------------------------------
----------Файл main.cpp:---------------------
#include "main.hpp"

int main() {

array <int, 4> array_1;
std::cout << array_1.getSize() << std::endl;

return 0;
}
---------------------------------------------

Что я не так объявил с шаблонами?

5 ответов

27 просмотров

Перенеси определение getSize() в хэдер

Maksj-Og Автор вопроса
Mikail Bagishov
Перенеси определение getSize() в хэдер

а я ещё буду реализовывать методы - мне всё целиком потом переносить в хедер?

Стоит.

либо переносить, либо явно инстанцировать, либо модули

Похожие вопросы

Обсуждают сегодня

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Я вот подумал. SSE выполняет операции максимум с 64-битной точностью. А FPU - всегда с 80-битной. Разве не должно быть FPU точнее тогда?
The Bird of Hermes
13
как быть с принтером? такой подход прокатит?
zamtmn
12
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Я не понимаю, это троллинг или что? Швабрика поддерживают, который буквально пишет на ассемблере взаимодействия с винапи. Я это ещё написал загрузчик и хоть что-то изучаю в о...
Shadow Akira
6
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Карта сайта