2013-04-24 136 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;一本好書可以幫助你掌握基本知識。