2016-04-30 56 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

@无用的权利。我会保留它只是为了解释 –

相关问题