2016-10-11 41 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]; 
} 

我編譯g++ -std=c++11 -Wall -g main.cpp matrixClass.cpp -o output(在Linux Mint的64位),但我得到錯誤:

/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 

我不明白是什麼問題,請幫忙。謝謝!

回答