2016-04-30 69 views
1

我的代碼將整數存儲在[n] x [n]矩陣中。但是,當我使用我的printMatrix()方法時,它僅在命令提示符處返回零,而不是先前分配給矩陣的整數。我想我必須使用引用/指針,但我不太確定如何。這裏是我的代碼:C++從一個類的第二個函數不能訪問第一個

#include <iostream> 
#include <vector> 

using namespace std; 

class Matrices 
{ 
public: 
    Matrices(); 
    void storeMatrix(vector <vector <int> > matr, int n); 
    void printMatrix(vector <vector <int> > matr, int n); 

private: 
    int n; 
    vector <vector <int> > matr; 
    int cell; 
};//class Matrices 
Matrices::Matrices() 
{ 

}//Constructor 

void Matrices::storeMatrix(vector <vector <int> > matr, int n) 
{ 
    for(int i = 0; i < n; i++) 
     { 
      for(int j = 0; j < n; j++) 
      { 
       cout << "Please insert an int for matr [" << i << "] [" << j << "]" << endl; 
       cin >> cell; 
       matr[i][j] = cell; 
      } 
     } 


}//storeMatrix 

void Matrices::printMatrix(vector <vector <int> > matr, int n) 
{ 
    for(int i = 0; i < n; i++) 
     { 
      for(int j = 0; j < n; j++) 
      { 
       cout << matr[i][j]; 
      } 
      cout<<endl; 
     } 
}//printMatrix 


int main() 
{ 
    int m; 
    cin >> m; 
    int n = 1; 

    for (int i = 1; i <= m; i++) // loop to make the input integer equivalent to power of 2; 
     n = n * 2; 

    vector <vector <int> > matr (n , vector <int> (n)); 
    Matrices k; 
    k.storeMatrix(matr, n); 
    k.printMatrix(matr, n); 


    return 0; 
} 

任何想法如何解決它?

+0

你說得對需要爲'storeMatrix'引用。對於'printMatrix',它不應該是必需的,儘管const ref可以節省性能。另外,你的設計有點不清楚。 'printMatrix'應該打印存儲的矩陣,還是打印傳入的矩陣?爲什麼函數參數與類參數名稱相同? – AndyG

+0

printMatrix應該打印存儲在storeMatrix中的矩陣 – Celestiny

回答

1

刪除所有與printMatrix()相關的參數。在main()和原型(在類中)以及其定義void YourClassName::printMatrix()。然後將其定義中設置此:

cout << this->matr[i][j]; //見下面的進一步解釋

,而不是這樣的:

cout << matr[i][j];

添加This將打印的「這個當前實例的私有成員「,你已經在前面的函數中填充了數據。

同樣在你的store()中,你需要「鏈接」你正在做什麼和當前實例。

總體:這個設計應該能幫助你更好地理解正在發生的事情。看到這個主():

int main() 
{ 
    int m; 
    int n = 1; 

    cin >> m; 

    Matrices k(m, n); // create an object k 
    k.storeMatrix(); // store matrix for "this" object k 
    k.printMatrix(); // print matrix of "this" object k 

    return 0; 
} 

,並期待在類:

class Matrices 
{ 
public: 
    Matrices(); 
    Matrices(int, int); 
    void storeMatrix(); 
    void printMatrix(); 

private: 
    int n; 
    vector <vector <int> > matr; 
    int cell; 
};//class Matrices 

Matrices::Matrices() 
{} 

Matrices::Matrices(int m, int n) 
{ 
    for (int i = 1; i <= m; i++) // loop to make the input integer equivalent to power of 2; 
     n = n * 2; 

    vector <vector <int> > _matr (n, vector <int>(n)); 
    this->matr = _matr; 

}//Constructor 

void Matrices::storeMatrix() 
{ 
    for (int i = 0; i < this->matr.size(); i++) 
    { 
     for (int j = 0; j < this->matr[i].size(); j++) 
     { 
      cout << "Please insert an int for matr [" << i << "] [" << j << "]" << endl; 
      cin >> cell; 
      this->matr[i][j] = cell; //whatever "this" object is, store its matrix 
     } 
    } 
}//storeMatrix 

void Matrices::printMatrix() 
{ 
    for (int i = 0; i < this->matr.size(); i++) 
    { 
     for (int j = 0; j < this->matr[i].size(); j++) 
     { 
      cout << this->matr[i][j]; // whatever "this" objecct is, print its matrix 
     } 
     cout << endl; 
    } 
}//printMatrix 
+0

誰和爲什麼投票?也許我需要學習一些我缺少的東西 –

+1

不知道任何反對票,但是一旦你正確地移除了兩個函數的'matr'參數,你就不需要限定'this-> matr' 。 – Useless

+0

@無用的權利。我會保留它只是爲了解釋 –

相關問題