Я изучаю C ++, и это не было приятным опытом (по крайней мере, по сравнению с Java или VBA). У меня есть следующий код:
//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, я думаю)