2013-08-21 2 views
0

저는 C++을 처음 접했고 저와 똑같은 문제를 가진 사람을 찾을 수 없습니다. 기본적으로, 나는 결코 직접 인스턴스화하지 않는 추상 클래스와 여러 자식 클래스를 갖기 위해 노력하고있다. 또한 모든 수퍼/하위 클래스에서 일관된 템플릿을 유지하려고합니다. 여기에 내 소스 파일이 있습니다. 나는 3 개의 유틸리티 파일과 하나의 .cpp 파일을 main 함수에 가지고있다.메서드를 찾을 수 없음 : 템플릿, 가상 메서드, 상속, 다형성

#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 

입니다 그리고 여기에 이러한 기능의 구현이다 abstract_matrix.h ..

#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

템플릿 함수의 구현은 헤더에 있어야합니다. 별도의 소스 파일에 저장할 수 없습니다. 컴파일러는 함수가 사용되는 지점에서 함수의 실제 본문을 확인하고 실제 템플릿 매개 변수를 알 필요가 있습니다.

관련 문제