2013-04-24 139 views
-2

我有一个将矩阵和向量相乘的代码。但是,它并没有for循环中输入好友功能calc()。你能发现错误吗?C++中的矩阵向​​量乘法

#include<iostream> 
using namespace std; 

class vector; 
class matrix 
{ 
public: 
    int r,c,ma[10][10]; 
    void get(int r, int c=3) 
    { 
     int i,j; 
     cout<<"Enter the matrix elements\n"; 
     for(i=0; i<r; i++) 
      for(j=0; j<c; j++) 
      { 
       cin>>ma[i][j]; 
      } 
     cout<<"Your input: "; 
     for(i=0; i<r; i++) 
     { 
      cout<<"\n"; 
      for(j=0; j<c; j++) 
      { 
       cout<<ma[i][j]<<"\t"; 
      } 
     } 
    } 
    friend void calc(matrix m,vector v); 
}; 

class vector 
{ 
public: 
    int val,va[10]; 
    void get(int v=3) 
    { 
     int i; 
     cout<<"\nEnter the vector values\n"; 
     for(i=0; i<v; i++) 
     { 
      cin>>va[i]; 
     } 
     cout<<"\nYour input:\n"; 
     for(i=0; i<v; i++) 
     { 
      cout<<va[i]<<"\t"; 
     } 
    } 
    friend void calc(matrix m,vector v); 
}; 

void calc(matrix m,vector v) 
{ 
    int c[10],i,j; 
    if(m.c == v.val) 
    { 
     for(i=0; i<v.val; i++) 
     { 
      cout<<"Entered 1st loop"; 
      c[i] = 0; 
      for(j=0; j<m.r; j++) 
      { 
       c[i] = c[i]+(m.ma[i][j] * v.va[j]); 
      } 
     } 
    } 
    cout<<"\nThe result is :\n"; 
    for(i=0; i<m.r; i++) 
    { 
     cout<<"Entered for"; 
     cout<<"\n"<<c[i]; 
    } 
} 

int main() 
{ 
    int r; 
    matrix m1; 
    vector v1; 
    cout<<"Enter the number of rows = "; 
    cin>>r; 
    m1.get(r); 
    v1.get(); 
    calc(m1,v1); 
    return 0; 
} 
+7

使用调试器,单步执行代码。查看无法输入for循环时的值以及原因。 – David 2013-04-24 14:03:43

+1

@Dave是的,我试过,这就是为什么我用循环内的一些输出代码,但没有任何工作... – 2013-04-24 14:05:30

+1

你不初始化一些类成员变量。 – 2013-04-24 14:06:39

回答

3

你从来没有在vector类初始化val,无论你在matrix类做rc。因此,支票if(m.c == v.val)永远不会通过,因为这些成员的值是undefined(包含随机垃圾)。

我建议你看看The Definitive C++ Book Guide and List;一本好书可以帮助你掌握基本知识。