| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2798 人关注过本帖
标题:(请教)关于模板与vector与运算符重载
只看楼主 加入收藏
caoaihua3
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-4-20
收藏
 问题点数:0 回复次数:8 
(请教)关于模板与vector与运算符重载
小弟试图通过vector类来定义一矩阵,定义过程如下:
template <typename T>
class Matrix{
      typedef Matrix<T> MYT;
      public:
            Matrix(){};
            Matrix(int r1,int j1);
            T& operator ()(int row,int line);
            const T operator ()(int row,int line) const;
            int get_row(const MYT&);
            int get_line(const MYT&);
            MYT operator +(MYT& temp1,MYT& temp2);
      private:
            int nr,nc;
            vector<vector<T> > mat;
};
经过编译,结果提示错误如下:
14 D:\Program Files\DEV-CPP\WORK\matrix\matrix3.h `Matrix<T> Matrix<T>::operator+(Matrix<T>&, Matrix<T>&)' must take either zero or one argument

17 D:\Program Files\DEV-CPP\WORK\matrix\matrix3.h ISO C++ forbids declaration of `vector' with no type
改了很多次,都没有搞清楚问题在哪,希望达人帮帮忙
搜索更多相关主题的帖子: 运算符 vector 模板 重载 
2008-03-21 10:15
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
看看基本c++,运算符重载为成员函数只要一个参数..还有大家都在stl...呵呵..这东西要好好看看

学习需要安静。。海盗要重新来过。。
2008-03-21 11:36
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include"vector"
using namespace std;
template <typename T>
class Matrix{
      typedef Matrix<T> MYT;
      public:
            Matrix(){};
            Matrix(int r1,int j1);
            T& operator ()(int row,int line);
            const T operator ()(int row,int line) const;
            int get_row(const MYT&);
            int get_line(const MYT&);
            MYT operator +(MYT& temp2);
      private:
            int nr,nc;
            vector<T> mat;
};

学习需要安静。。海盗要重新来过。。
2008-03-21 11:39
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
请问楼上STL要达到哪种程度看比较好。我只学了C++基本语法,现在学数据结构,也想多看一点书,但怕看不懂浪费时间。

i like linux...
2008-03-21 13:09
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
越多越好...我一直都在看..反复看到熟悉...个人观点..如果你是学生会语法就可以了

学习需要安静。。海盗要重新来过。。
2008-03-21 13:16
eagleboycn
Rank: 1
等 级:新手上路
帖 子:191
专家分:0
注 册:2007-9-26
收藏
得分:0 
成员函数本身还有个隐式的 *this
所以如果再加两个形参就多了

兵法的精要在于韬晦自己
2008-03-21 14:12
caoaihua3
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-4-20
收藏
得分:0 
按照达人的指点,又仔细看了一下书,将+运算付改成了友元函数,如下
class Matrix{
      typedef Matrix<T> MYT;
      friend MYT operator+(MYT& ,MYT&);
      public:
            Matrix(){};
            Matrix(int r1,int j1);
            T& operator ()(int row,int line);
            const T operator ()(int row,int line) const;
            int get_row(const MYT&);
            int get_line(const MYT&);
      public:
            int nr,nc;
            vector<T > mat;
};
  结果编译还是有问题:

7 D:\Program Files\DEV-CPP\WORK\matrix\matrix3.h [Warning] friend declaration `Matrix<T> operator+(Matrix<T>&, Matrix<T>&)' declares a non-template function
17 D:\Program Files\DEV-CPP\WORK\matrix\matrix3.h ISO C++ forbids declaration of `vector' with no type
再请问一下达人上述问题怎么搞....
2008-03-21 14:32
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include<vector>
using namespace std;
template <typename T>
class Matrix{
      typedef Matrix<T> MYT;
      friend MYT operator+(MYT& ,MYT&);
      public:
            Matrix(){};
            Matrix(int r1,int j1);
            T& operator ()(int row,int line);
            const T operator ()(int row,int line) const;
            int get_row(const MYT&);
            int get_line(const MYT&);
      public:
            int nr,nc;
            vector<T> mat;
};
好好看书..而且不要用 using namespace std;
有污染问题...

学习需要安静。。海盗要重新来过。。
2008-03-21 14:40
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include<vector>
using std::vector;
template <class T>
class Matrix{
      typedef Matrix<T> MYT;
      friend MYT operator+(MYT& ,MYT&);
      public:
            Matrix(){};
            Matrix(int r1,int j1);
            T& operator ()(int row,int line);
            const T operator ()(int row,int line) const;
            int get_row(const MYT&);
            int get_line(const MYT&);
      public:
            int nr,nc;
            vector<T> mat;
};

学习需要安静。。海盗要重新来过。。
2008-03-21 14:42
快速回复:(请教)关于模板与vector与运算符重载
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023581 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved