c++ 输出符的重载??

lewis_c402 2005-06-04 08:53:07
#include <iostream>

using namespace std;

//template<class T> ostream& operator<< ( ostream& os, const Array1D<T>& v);

template<class T>
class Array1D
{
friend ostream& operator<< ( ostream& os, const Array1D<T>& v );
public:
Array1D( int size = 0 );
T& operator[] ( int i ) const;
private:
int size;
T *element;
};

template<T> ostream& operator<< ( ostream& os, const Array1D<T>& v )
{
for(int i=0; i<size; ++i)
os << element[i] << ' ';
return os;
}

其他的函数都正确,加上重载的函数后就有错误,
编译器报的错误为:(我用的是dev c++ )

[Linker error] undefined reference to `operator<<(std::ostream&, Array1D<int> const&)'






...全文
136 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
runall 2005-06-04
  • 打赏
  • 举报
回复
学习
foochow 2005-06-04
  • 打赏
  • 举报
回复
mark!!!
lewis_c402 2005-06-04
  • 打赏
  • 举报
回复
thanks to qhfu(崩溃)
你第二次贴的是对的
lewis_c402 2005-06-04
  • 打赏
  • 举报
回复
to:
qhfu(崩溃)
先谢谢了, 但是你加的这些代码我不用定义重载函数也能运行.

int main()
{
Array1D<int> a(10);
for(int i = 0;i<10;i++)
{
a[i] = i;
cout<<a[i]<<" ";
}
cout << a; //加重载函数后应该能运行这行. 我说的对不对.
system("pause");
}
Coffee_62 2005-06-04
  • 打赏
  • 举报
回复
来晚了
qhfu 2005-06-04
  • 打赏
  • 举报
回复
我前面的代码 贴的并 不对  呵呵 
不过改正了, 刚才把楼主 的问题给忘了
qhfu 2005-06-04
  • 打赏
  • 举报
回复
不好意思刚才没有注意到,你的问题是重载 operator<<,
又改了一下 :)
#include <iostream>

using namespace std;

//template<class T> ostream& operator<< ( ostream& os, const Array1D<T>& v);

template<class T>
class Array1D
{
template<class T>
friend ostream& operator<< ( ostream& os,const Array1D<T>& v );
public:
Array1D( int size = 0 );
~Array1D()
{
delete [] element;
}
T& operator[] ( int i ) const;
private:
int size;
T *element;
};

template <class T>
Array1D<T>::Array1D<T>(int size):size(size)
{
element = new T[size];
}

template <class T>
T& Array1D<T>::operator[](int i) const
{
return element[i];
}

template<class T> ostream& operator<<( ostream& os,const Array1D<T>& v )
{
for(int i=0; i<v.size; ++i)
os<<(v.element)[i]<< ' ';
return os;
}
int main()
{
Array1D<int> a(10);
for(int i = 0;i<10;i++)
{
a[i] = i;
cout<<a[i]<<" ";
}
cout<<a;
system("pause");
}
useresu 2005-06-04
  • 打赏
  • 举报
回复
说错了,
这里的element[i]和size之前不用写v.
useresu 2005-06-04
  • 打赏
  • 举报
回复
呵呵,崩溃兄完整代码都帖上来了?

慢了一分钟,我又画蛇添足了..
qhfu 2005-06-04
  • 打赏
  • 举报
回复
帮你加了些函数的定义, 可以运行阿,
useresu 2005-06-04
  • 打赏
  • 举报
回复
如果你的函数
Array1D( int size = 0 );
T& operator[] ( int i ) const;
都有实现的话,这两个函数一定得有实现吧(是不是你没有帖出来?那样的话应该没有问题.)

有问题的就是
for(int i=0; i<size; ++i)
os << element[i] << ' ';///这里的element[i]和size之前都没有写v.
qhfu 2005-06-04
  • 打赏
  • 举报
回复
#include <iostream>

using namespace std;

//template<class T> ostream& operator<< ( ostream& os, const Array1D<T>& v);

template<class T>
class Array1D
{
friend ostream& operator<< ( ostream& os, const Array1D<T>& v );
public:
Array1D( int size = 0 );
~Array1D()
{
delete [] element;
}
T& operator[] ( int i ) const;
private:
int size;
T *element;
};

template <class T>
Array1D<T>::Array1D<T>(int size):size(size)
{
element = new T[size];
}

template <class T>
T& Array1D<T>::operator[](int i) const
{
return element[i];
}
template<class T> ostream& operator<< ( ostream& os, const Array1D<T>& v )
{
for(int i=0; i<size; ++i)
os << element[i] << ' ';
return os;
}
int main()
{
Array1D<int> a(10);
for(int i = 0;i<10;i++)
{
a[i] = i;
cout<<a[i]<<" ";
}
system("pause");
}
lewis_c402 2005-06-04
  • 打赏
  • 举报
回复
不好意思,那里是我抄错了,
我在visual studio 里试了,编译是正常的,但运行时会有错误报出
foochow 2005-06-04
  • 打赏
  • 举报
回复
template<class T> 最下面这里少写了class ,改了以后在VC6.0下编译正常-_-

64,683

社区成员

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

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