2013-02-21 44 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

模板的实现必须位于头文件中。

相关问题