2016-10-11 10 views
0

このような他の質問がありましたが、私の場合はこれらの質問の回答のすべてを行っていますが、未定義の参照エラーが発生します。ここでmain.cpp次のとおりです。ここで別ファイルで定義されているメンバー関数への未定義の参照

#include "mainHeader.hpp" 

int main() { 
    Matrix2D<int> matrix2(3,3); 

    matrix2(2,2) = 99; // produces an error 

    return 0; 
} 

mainHeader.hppです:

#ifndef _MAINHEADER_HPP 
#define _MAINHEADER_HPP 

#include <iostream> 
#include <vector> 

template <class T> 
class Matrix2D { 
private: 
    std::vector< std::vector<T> > matrix; 
public: 
    /* Constructors */ 
    Matrix2D(unsigned int numberOfRows = 1, unsigned int numberOfColumns = 1) : matrix(std::vector< std::vector<T> >(numberOfRows, std::vector<T>(numberOfColumns))) {} 

    /* Operator overloads */ 
    T & operator() (unsigned int, unsigned int); 
}; 

#endif // _MAINHEADER_HPP 

最後に、ここにmatrixClass.cppです:

#include "mainHeader.hpp" 

// Overload the() operator 
template <class T> 
T & Matrix2D<T>::operator() (unsigned int row, unsigned int column) { 
    return matrix[row][column]; 
} 

私は(Linuxのミント64ビット上)g++ -std=c++11 -Wall -g main.cpp matrixClass.cpp -o outputでコンパイルが、私は得ますエラー:

/tmp/ccoSx71n.o: In function `main': 
/home/.../main.cpp:7: undefined reference to `Matrix2D<int>::oper 
ator()(unsigned int, unsigned int)'                    
collect2: error: ld returned 1 exit status 

問題が何か分かりません。助けてください。ありがとうございました!

答えて

-1

テンプレートを使用して操作しているので、宣言と同じ場所にある.h/.hppクラスの関数を定義する必要があります。 を参照してください。Why can templates only be implemented in the header file?

+1

十分な評判を得た時点で、重複してフラグを立てるか適切なコメントを付けてください。応答は間違った反応です。 –

関連する問題