2013-04-13 65 views
-1

我有模板矢量(我自己的模板不是STL)。我有friend operator*问题。问题是结果是ranodm数字不是整数的乘积。模板和朋友操作符*

#include <iostream> 
#include <limits> 

using namespace std; 

template<typename T,int Roz> 
class Vector{ 
public: 
T tab[Roz]; 
T get(int i) 
{ 
    return tab[i]; 
} 
void set(T val,int i) 
{ 
    tab[i]=val; 
} 

friend Vector operator* (Vector & a, const int & b){ 
     Vector<T,Roz> w; 

     for(int i=0;i<Roz;++i) 
     { 
      cout<<a.get(i)<<" "; 
      w.set(i,a.get(i)*b); 
     } 
     cout<<endl; 
     for(int i=0;i<Roz;++i) 
     { 
      cout<<w.get(i)<<endl;; 
     } 

     return w; 
} 
}; 

int main() 
{ 
Vector<int,6> w; 
w.set(2,0); 
w.set(3,1); 
w.set(5,2); 
w.set(5,3); 
w.set(5,4); 
w.set(5,5); 
cout<<w.get(0)<<" "<<w.get(1)<<" "<<w.get(2)<<" "<<w.get(3)<<" "<<w.get(4)<<" "<<w.get(5)<<endl; 
Vector<int,6> zz=w*3; 
cout<<w.get(0)<<" "<<w.get(1)<<" "<<w.get(2)<<" "<<w.get(3)<<" "<<w.get(4)<<" "<<w.get(5)<<endl; 
cout<<w.get(0)<<" "<<w.get(1)<<" "<<w.get(2)<<" "<<w.get(3)<<" "<<w.get(4)<<" "<<w.get(5)<<endl; 
cout<<zz.get(0)<<" "<<zz.get(1)<<" "<<zz.get(2)<<" "<<zz.get(3)<<" "<<zz.get(4)<<" "<<zz.get(5)<<endl; 
return 0; 
} 

对于超出的输出值的代码是:

2 3 5 5 5 5 5 

2 3 1 5 5 5 5 <----- one insted of five!! Is the same vector after multiply! 

8 <---------- 2*3 is not 8 

1976963470 

1976963426 <--------n/c 

2 

0 

0 

2 3 1 5 5 5 

2 3 1 5 5 5 

8 1976963470 1976963426 2 0 0 

结果是随机numers不矢量。我的错误在哪里?

回答

2

你正在做的:

w.set(i, a.get(i) * b) 

所以你传递的指数作为第一个参数,和值作为第二个参数。但是,你的功能set()被声明为:

void set(T val, int i) 

其中第一个参数是值,第二个参数是位置。看起来你正在交换参数。

+0

呃,真是太遗憾了。无论如何THX我都很困。 – Aku

+0

@Aku:我们都在那里;)很高兴帮助 –