c ++编译错误链接器命令失败

时间:2016-06-06 03:35:41

标签: c++ xcode templates

我是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文件中,我的代码工作正常。

1 个答案:

答案 0 :(得分:2)

模板定义不能拆分成不同的文件。你应该将Vector.cpp中的所有内容复制到Vector.h中。或者将Vector.cpp重命名为除* .cpp(可能是Vector.imp)之外的任何内容,然后在Vector.h的末尾添加#include“Vector.imp”。