请教各位大神 undefined reference to 问题

尼古拉斯Johnson 2013-10-01 10:40:41

#ifndef VECTOR_H
#define VECTOR_H
#define DEFAULT_CAPACITY 3

typedef int Rank;

template <typename T>class Vector
{
private:
Rank _size;
int _capacity;
T* _elem;
public:
// void expand();
// void shrink();
//
void copyForm(T* const A,Rank lo,Rank hi);
//
// bool bubble(Rank lo,Rank hi);
// void bubbleSort(Rank lo,Rank hi);
// void Vector<T> exchange(Rank i,Rank j);
// Rank selectMax(Rank lo,Rank hi);
// void merge(Rank lo,Rank hi);
// void mergeSort(Rank lo,Rank hi);
// Rank partition(Rank lo,Rank hi);
// void quickSort(Rank lo,Rank hi);
// void heapSort(Rank lo,Rank hi);

Vector(int c = DEFAULT_CAPACITY){_elem = new T[_capacity = c];_size = 0;}
Vector(T* A,Rank lo,Rank hi){copyForm(A,lo,hi);}//区间复制//
Vector(T* A,Rank n){copyForm(A,0,n);}//从头复制//
Vector(Vector<T> const& v,Rank lo,Rank hi){copyForm(v._elem,lo,hi);}//
Vector(Vector<T> const& v){copyForm(v._elem,0,v._size);}//

~Vector(){delete[] _elem;}//
//只读访问接口 相当于属性
// Rank size() const//
// {
// return _size;
// }
// bool empty() const {return _size<=0;}//
// int disordered() const;//
// Rank find(T const& e)const {return find(e,0,(Rank)_size);}//
// Rank find(T const& e,Rank lo,Rank hi)const;//
// Rank search(T const &e)const//
// {
// return (0>=_size)?-1:search(e,(Rank)0,(Rank)_size);
// }
// Rank search(T const& e,Rank lo,Rank hi)const;//
//
// //可写接口
T& operator[](Rank r)const;
// Vector<T>& operator=(Vector<T> const&)const;//
// T remove(Rank r);//
// int remove(Rank lo,Rank hi);//
// Rank insert(Rank r,T const&e);//
// Rank insert(T const&e){return insert(_size,e);}//
// void sort(Rank lo,Rank hi);//
// void sort(){sort(0,_size);}//
// void unsort(Rank lo,Rank hi);//
// void unsort(){unsort(0,_size);}//
// int deduplicate();//
// int uniquify();//
// //遍历
// void traverse(void(*)(T&)); //使用函数指针 只读或局部修改//
// template<typename VST> void traverse(VST&);//使用函数对象 可全局性修改//




};




#endif





#include "Vector1.h"
template <typename T> void Vector<T>::copyForm(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 i)const
{
return _elem[i];
}




#include <iostream>
#include "Vector1.h"
using namespace std;

int main()
{
int arr[4] = {1,2,3,4};
Vector<int> v1(arr,4);
return 0;
}




D:\DengYC\Projects\Vector1\Vector1.h|31|undefined reference to `Vector<int>::copyForm(int*, int, int)'|
...全文
470 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lee_鹿游原 2013-10-01
  • 打赏
  • 举报
回复
或者在头文件里,包含.cpp。
  • 打赏
  • 举报
回复
引用 1 楼 qq120848369 的回复:
模板隐式实例化需要看见类的所有方法的定义,所以把实现放到头文件里去。
果然 大神好牛!!
qq120848369 2013-10-01
  • 打赏
  • 举报
回复
模板隐式实例化需要看见类的所有方法的定义,所以把实现放到头文件里去。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧