Ujae Kang
Ujae Kang

Reputation: 167

losing private variable information during the class function calls

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

Answers (2)

Aesthete
Aesthete

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

John3136
John3136

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

Related Questions