我剛剛拿起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);
}
現在,當我使用SimpleMatrix
從main
它編譯,鏈接和正常工作。當我試圖從聲明爲(在 「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
的默認構造函數,但這不是真正令我擔心的。我不明白這兩種情況之間的根本區別是什麼。
任何幫助,非常感謝。
謝謝安迪,就是這樣! – conciliator 2013-02-21 21:16:32