Witam.
Dlaczego przy próbie kompilacji poniższego kodu otrzymuję błędy?
Data.h
#pragma once
#include <array>
#include <vector>
#include <string>
#include <fstream>
#include "Globals.h"
#include "Color.h"
#include "Mouse.h"
template <size_t Colors_Size, size_t Mouses_Size>
class Data
{
void Load_Accounts(std::string Name);
public:
std::array<Color, Colors_Size> Colors;
std::array<Mouse, Mouses_Size> Mouses;
std::vector<std::array<std::string, 2>> Accounts;
void Initialize(std::string Name);
};
Data.cpp
#include "Data.h"
template <size_t Colors_Size, size_t Mouses_Size> void Data<Colors_Size, Mouses_Size>::Initialize(std::string Name)
{
}
template <size_t Colors_Size, size_t Mouses_Size> void Data<Colors_Size, Mouses_Size>::Load_Accounts(std::string Name)
{
}
main.cpp
Data<5, 5> Data_Instance;
Data_Instance.Initialize("name");
Error 2 error LNK1120: 1 unresolved externals
Error 1 error LNK2001: unresolved external symbol "public: void __thiscall Data<5,5>::Initialize(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?Initialize@?$Data@$04$04@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
export
wyleciało ze standardu. W pliku źródłowym możesz mieć pełne specjalizacje albo gotowe konkretyzacje dla typów. Postać ogólna musi być dostępna podczas kompilacji jeżeli nie użyjesz ani konkretyzacji ani specjalizacji. (To mówi wprost standard: 14/6, 14.5.5/1)