2013-02-21 43 views
0

我剛剛拿起C++經過了多年的意義。現在我試圖實現一個簡單的矩陣類來從其他類使用。繼GManNickG's lead,這裏是我的SimpleMatrix(在 「SimpleMatrix.h」 聲明):無法理解爲什麼XCode鏈接器沒有看到某些方法

#pragma once 
#include <vector> 

template <typename T> 
class SimpleMatrix {  
    unsigned int numCols, numRows;  
public:  
    std::vector<T> data; 

    SimpleMatrix(unsigned int cols, unsigned int rows) : 
    numCols(cols), 
    numRows(rows), 
    data(numCols * numRows) 
    {}; 

    T getElement(unsigned int column, unsigned int row); 
    void setShape(unsigned int column, unsigned int row, const T& initValue);  
}; 

和(在 「SimpleMatrix.cpp」)來實現:

#include "SimpleMatrix.h" 

template <class T> 
T SimpleMatrix<T>::getElement(unsigned int column, unsigned int row) { 
    return data[row * numCols - 1];  
} 

template <class T> 
void SimpleMatrix<T>::setShape(unsigned int columns, unsigned int rows, const T& initValue) { 
    numCols = columns; 
    numRows = rows; 
    data.assign(columns * rows, initValue); 
} 

現在,當我使用SimpleMatrixmain它編譯,鏈接和正常工作。當我試圖從聲明爲(在 「Container.h」)的對象Container使用它:

#include "SimpleMatrix.h" 

class Container { 
public:  
    SimpleMatrix<int> matrix;  
    Container();  
    void doStuff(); 
}; 

和(在 「Container.cpp」)來實現:

#include "Container.h" 
#include "SimpleMatrix.h" 

void Container::doStuff() {  
    this->matrix.setShape(2, 2, 0); 
    this->matrix.getElement(1, 1); 
} 

Xcode的抱怨

Undefined symbols for architecture x86_64:

"SimpleMatrix<int>::getElement(unsigned int, unsigned int)", referenced from: 
Container::doStuff() in Container.o 

"SimpleMatrix<int>::setShape(unsigned int, unsigned int, int const&)", referenced from: 
Container::doStuff() in Container.o 

ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

我已經檢查了 「構建階段/編譯源代碼」 -settings,並且所有三個文件在那裏(main.cpp中,SimpleMatrix.cpp和Container.cpp)。

此代碼可能存在許多問題。一個想到的是缺少SimpleMatrix的默認構造函數,但這不是真正令我擔心的。我不明白這兩種情況之間的根本區別是什麼。

任何幫助,非常感謝。

+0

謝謝安迪,就是這樣! – conciliator 2013-02-21 21:16:32

回答

2

模板的實現必須位於頭文件中。

相關問題