Инициализация корыто конструктора 2-мерный указатель - PullRequest
0 голосов
/ 15 мая 2018

Я создал класс и попытался инициализировать двухмерный указатель в конструкторе моего класса. Затем я использую геттер в моем main.cpp, но он не работает. Сборка прошла успешно, но я получаю значение 0xcccccccc? при отладке. Вот мой код.

Заголовок

Asset {
    public:

    Asset(int numberAssets, int numberReturns); // Constructor
    //getter and setter
    double **getAssetReturnMatrix();

    ~Asset();

private:
    int _numberAssets, _numberReturns;
    double **_assetReturn;
};

Cpp файл

#include "Asset.h"


Asset::Asset(int numberAssets, int numberReturns)
{
    // store data
    _numberAssets = numberAssets; // 83 rows  
    _numberReturns = numberReturns; // 700 cols

    //allocate memory for return matrix
    double **_assetReturn = new double*[_numberAssets]; // a matrix to  store the return data
    for (int i = 0; i<_numberAssets; i++)
        _assetReturn[i] = new double[_numberReturns];

}

Asset::~Asset()
{
}

main.cpp

#include <iostream>
#include "read_data.h"
#include "Asset.h"

using namespace std;
int  main(int  argc, char  *argv[])
{
    //Create our class object

    int numberAssets = 83;
    int numberReturns = 700;
    Asset returnMatrix = Asset(numberAssets, numberReturns);

    //read the data from the file and store it into the return matrix
    string fileName = "asset_returns.csv";
    double ** data = returnMatrix.getAssetReturnMatrix();

    cout << data; // <--- Value 0xcccccccc? here

    //readData(data, fileName);

    return 0;
}

Не могли бы вы сказать мне, где я не прав? Большое спасибо!

1 Ответ

0 голосов
/ 16 мая 2018

Я создал новую переменную, которая не имела ничего общего с моим личным членом double **_assetReturn, определенным в моем h-файле, здесь:

//allocate memory for return matrix
double **_assetReturn = new double*[_numberAssets]; // a matrix to  store the return data
for (int i = 0; i<_numberAssets; i++)
    _assetReturn[i] = new double[_numberReturns];

Изменено:

//allocate memory for return matrix
    this->_assetReturn = new double*[this->_numberAssets]; // a matrix to  store the return data
    for (int i = 0; i<this->_numberAssets; i++)
        this->_assetReturn[i] = new double[this->_numberReturns];

Отлично сработало.

...