могу разобраться по какой причине:
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;
}
---------------------------------------------
Что я не так объявил с шаблонами?
Перенеси определение getSize() в хэдер
а я ещё буду реализовывать методы - мне всё целиком потом переносить в хедер?
Стоит.
либо переносить, либо явно инстанцировать, либо модули
Обсуждают сегодня