Я изучаю C++, и это не было приятным опытом (по крайней мере, по сравнению с Java или VBA). У меня есть следующий код:Шаблоны и .cpp-файлы
//This is in a number.h file
#pragma once
template <class T>
class number{
public:
T value1, value2, result;
public:
T add();
number(T value1_in, T value2_in);
};
//This is in a number.cpp file
template <class T>
number<T>::number(T value1_in, T value2_in){
value1 = value1_in;
value2 = value2_in;
}
template <class T>
T number<T>::add(){
result = value1 + value2;
return result;
}
//This is in main.cpp
#include "number.h"
#include <iostream>
using namespace std;
int main(){
int a = 2, b =3;
number<int> n1(a,b);
cout << n1.add();
system("pause");
return EXIT_SUCCESS;
}
Это, конечно, дает мне ошибку. Хотя я уверен, что он должен работать. Более конкретно, я получаю ошибку компоновщика. После 3 часов рассмотрения этого я решил включить number.cpp в main.cpp, и это волшебным образом заставило его работать. Что, черт возьми, происходит? Я думал, что мне нужно включить заголовочный файл (я написал класс матрицы с группой линейных решателей для разных алгоритмов до этого и включал только заголовочные файлы во всем проекте). Является ли этот специфический или компилятор C++ конкретным? (Я использую Dev-C++ 4.9.9.2, у которого есть Mingw, я думаю)
Дублировать вопрос. Существует два решения. См. [Этот ответ на другой вопрос] (http://stackoverflow.com/a/8752879/146041) –
Возможный дубликат [Почему шаблоны могут быть реализованы только в файле заголовка?] (Http: // stackoverflow.com/questions/495021/why-can-templates-only-be-implement-in-the-header-file) –