Reputation: 167
Below codes will show, when run, that the private member variables (MaxRows, MaxCols) are changing by the time function input is called. Could you please help what is going on?
As you can see the first constructor generates correct display of private variables. However the function will break them apart.
#include <iostream>
#include <string>
#include <fstream>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <windows.h>
#include <cstring>
#include <cctype>
#include <iomanip>
#include <algorithm>
#include <sstream>
using namespace std;
class TwoD
{
private:
int MaxRows;
int MaxCols;
double** outerArray;
public:
TwoD(int MaxRows, int MaxCols)
{
outerArray = new double *[MaxRows];
for (int i = 0; i < MaxRows; i++)
outerArray[i] = new double[MaxCols];
cout << MaxRows << MaxCols << endl;
}
void input()
{
cout << MaxRows << MaxCols << endl;
for (int k = 0; k < MaxRows; k++)
for (int j = 0; j < MaxCols; j++)
cin >> outerArray[k][j];
}
void outPut()
{
for (int l = 0; l < MaxRows; l++)
{
for (int m = 0; m < MaxCols; m++)
cout << outerArray[l][m] << " ";
cout << endl;
}
}
~TwoD()
{
for (int i = 0; i < MaxRows; i++)
delete[] outerArray[i];
delete[] outerArray;
}
};
int main()
{
TwoD example(5, 2);
example.input();
example.outPut();
return 0;
}
Upvotes: 2
Views: 109
Reputation: 18858
Naming your class member appropriately will help you here. Rename your members and initialize them when the class is constructed.
It's confusing that your arguments are named the same as your members.
TwoD(int maxRows, int maxCols)
: m_maxRows(maxRows)
, m_maxCols(maxCol)
Upvotes: 1
Reputation: 29266
You never actually set the class members to the values passed as parameters.
Also: you might want to look at your naming convention - normally use maxRows
not MaxRows
TwoD(int maxRows, int maxCols) : MaxRows(maxRows), MaxCols(maxCols)
{
outerArray = new ...
Upvotes: 4