我是C ++的新手,我不熟悉构建一个c ++项目。 我想写一个简单的Vector类(不是默认的c ++向量),所以我写了一个测试程序。
这是我的头文件(" Vector.h")
# define Vector_H
typedef int Rank;
template <typename T> class Vector {
protected:
Rank _size; int _capacity; T* _elem;
void copyFrom ( T const* A, Rank lo, Rank hi );
public:
Vector ( T const* A, Rank n ) { copyFrom ( A, 0, n ); }
T& operator[] ( Rank r ) const;
};
这是我的Vector.cpp文件:
#include "Vector.h"
typedef int Rank;
template <typename T>
void Vector<T>::copyFrom ( T const* A, Rank lo, Rank hi ) {
_elem = new T[_capacity = 2 * ( hi - lo ) ]; _size = 0;
while ( lo < hi )
_elem[_size++] = A[lo++];
}
template <typename T>
T& Vector<T>::operator[] ( Rank r ) const
{ return _elem[r]; }
这是我的main.cpp:
#include <iostream>
#include "Vector.h"
using namespace std;
int main() {
int a[10]={1,3,5,7,9};
Vector<int> c(a,5);
cout<<c[4]<<endl;
return 0;
}
当我将这3个文件放入我的Xcode项目时,它会返回错误: 链接器命令失败,退出代码为1(使用-v查看调用) 我不知道该怎么做。 如果我把所有这些都放在一个cpp文件中,我的代码工作正常。
答案 0 :(得分:2)
模板定义不能拆分成不同的文件。你应该将Vector.cpp中的所有内容复制到Vector.h中。或者将Vector.cpp重命名为除* .cpp(可能是Vector.imp)之外的任何内容,然后在Vector.h的末尾添加#include“Vector.imp”。