一个关于模板的问题

fanhj_2007 2009-04-11 11:02:52
/*
* intArray.h
*
* Created on: 2009-4-7
* Author: Administrator
*/

#ifndef INTARRAY_H_
#define INTARRAY_H_
#include <iostream>
using namespace std;
template <class T>
class Array {
public:
T& operator[ ] (int );
const T& operator[ ](int ) const;
Array (int );
~Array();
int get_size() const;
private:
T* a;
int size;
Array(); //for emphasis(重点)
T dummy_val; // rerurned on bad index
};
template <class T>
T& Array<T>::operator[ ](int i) {
if ( i < 0 || i >= size ) {
cerr << "index "<< i << "out of bounds";
return dummy_val;
}
return a[i];
}

template <class T>
const T& Array<T>::operator[ ](int i) const {
if ( i < 0 || i >= size ) {
cerr << "index "<< i << "out of bounds";
return dummy_val;
}
return a[i];
}

template <class T>
Array < T > :: Array( int s) {
a = new T[size = s];
}

template <class T>
Array< T > :: ~Array() {
delete[ ] a;
}
// top-level overload of operator <<
template <class T>
ostream& operator<< (ostream& os, const Array< T>& ar) {
for (int i = 0; i < ar.get_size(); i++)
os << ar[i] <<endl;
return os;
}


#endif /* INTARRAY_H_ */




#include <iostream>
#include "Array.h"
using namespace std;
int main() {
Array<int> a(3);
a[0] = 0;
a[1] = 1;
a[2] = 2;
cout << a;
return 0;
}
代码我完全是按照书本上抄写的,我的eclipse编译完后说有一个错误,但是那个红色的小X只是在工程文件上有,而具体的代码上没,
error 提示:make****(array.exe)error 1
...全文
101 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
int get_size() const;

有声明就得实现它,哪怕实现操作为空也行。
「已注销」 2009-04-11
  • 打赏
  • 举报
回复
下面完整代码编译通过,输出0,1,2
#include <iostream>

using namespace std;
template <class T>
class Array {
public:
T& operator[ ](int);
const T& operator[ ](int) const;
Array(int);
~Array();
int get_size() const;
private:
T* a;
int size;
Array(); //for emphasis(重点)
T dummy_val; // rerurned on bad index
};
template <class T>
T& Array <T>::operator[ ](int i) {
if (i < 0 || i >= size) {
cerr << "index " << i << "out of bounds";
return dummy_val;
}
return a[i];
}

template <class T>
const T& Array <T>::operator[ ](int i) const {
if (i < 0 || i >= size) {
cerr << "index " << i << "out of bounds";
return dummy_val;
}
return a[i];
}

template <class T>
Array < T > :: Array(int s) {
a = new T[size = s];
}

template <class T>
Array < T > :: ~Array() {
delete[ ] a;
}

template <class T>
int Array < T > :: get_size() const {
return size;
}

// top-level overload of operator <<
template <class T>
ostream& operator << (ostream& os, const Array < T>& ar) {
for (int i = 0; i < ar.get_size(); i++)
os << ar[i] << endl;
return os;
}



using namespace std;
int main() {
Array <int> a(3);
a[0] = 0;
a[1] = 1;
a[2] = 2;
cout << a;
return 0;
}
「已注销」 2009-04-11
  • 打赏
  • 举报
回复
添加get_size方法:
template <class T>
int Array < T > :: get_size() const {
return size;
}

65,210

社区成员

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

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