2013-08-21 3 views
0

Я довольно новичок в C++, и я не могу найти никого другого, у кого была такая же проблема, как и я. В принципе, я пытаюсь создать абстрактный класс, который я никогда не создаю непосредственно, и несколько дочерних классов. Кроме того, я пытаюсь сохранить согласованный шаблон по всем супер/подклассам. Вот мои исходные файлы. У меня есть 3 служебных файла и один .cpp-файл для основной функции.Метод не найден: Шаблоны, Виртуальные методы, Наследование, Полиморфизм

abstract_matrix.h

#ifndef ABSTRACTMATRIX 
#define ABSTRACTMATRIX 

template<class T> 
class DataMatrix { 

public: 
    int numFeatures; 
    int numPoints; 

    T* data; 
    T* classifications; 

    virtual void scale(T scalar) = 0; 
}; 

#endif 

Вот мой подкласс объявление этого абстрактного класса, sparse_host_matrix.h

#ifndef SPARSEHOSTMATRIX 
#define SPARSEHOSTMATRIX 

#include <iostream> 

template<class T> 
class SparseHostMatrix : public DataMatrix<T> { 

public: 

    void scale(T scalar); 
}; 

#endif 

А вот реализация этих функций ..

#include "sparse_host_matrix.h" 
#include <iostream> 


template<class T> 
void SparseHostMatrix<T>::loadFromFile(char* filename) { 
    std::cout << "Loading in sparseHostMatrix" << std::endl; 
} 

template<class T> 
void SparseHostMatrix<T>::scale(T scalar) { 
    std::cout << "Loading in sparseHostMatrix" << std::endl; 
} 

И когда я запускаю эту основную функцию ...

#include <iostream> 

using namespace std; 
#include "abstract_matrix.h" 
#include "sparse_host_matrix.h" 

int main() { 
    DataMatrix<double> *myMat = new SparseHostMatrix<double>; 
    myMat->scale(.5); 
} 

Я получаю ошибку неопределенной ссылки на `SparseHostMatrix :: масштаб (двойной)

Извини за огромное количество кода, я просто очень смущен и застрял на этом некоторое время без успешно найти решение на SO или иначе.

ответ

2

Реализация функций шаблона должна быть в заголовке. Вы не можете поместить его в отдельный исходный файл. Компилятору необходимо увидеть фактическое тело функции в том месте, где оно используется, и становятся известны известные параметры шаблона.