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 ответов

30 просмотров

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

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

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

Стоит.

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта