ここから本文です

c++クラス内のprivate 変数をコンストラクタの引数によって動的に確保したいと考え...

ppp********さん

2017/1/1323:32:31

c++クラス内のprivate 変数をコンストラクタの引数によって動的に確保したいと考え, 次のようなプログラムを作ってみました. main関数でdata[100]のデータにより, clusterクラ

スのDataSetという変数を動的確保しようとしています. この場合, 僕の想像ではDataSetにdata[100]が代入されるイメージだったのですが, show()としてみるとわけのわからない数字(アドレスの整数版?)が出てきます. どうすれば意図したようにうごくのでしょうか.
------------------------------------------cluster.h-----------------------------------------
#pragma once
class cluster {
private:
double *DataSet;
int DataNum;
public:
cluster(double *DataSet_arg, int DataNum);
void show();
};

-----------------------------------------------cluster.cpp----------------------------------------------------
#include"cluster.h"
#include<iostream>
cluster::cluster(double *DataSet_arg, int DataNum_arg) {
DataSet = new double[DataNum];
int i;
for (i = 0; i < DataNum; i++) {
DataSet[i] = DataSet_arg[i];
}
DataNum = DataNum_arg;
}
void cluster::show() {
int i;
for (i = 0; i < DataNum;i++){
std::cout << DataSet[i] << "\n";
}
}

-------------------------------------------main.cpp-----------------------------------------------------------
#include"cluster.h"
#include<iostream>
int main() {
double data[100] = { 0 };
cluster A(data, 10);
A.show();
}

閲覧数:
22
回答数:
1

違反報告

ベストアンサーに選ばれた回答

reb********さん

2017/1/1323:43:14

■おかしいところ
cluster::cluster(double *DataSet_arg, int DataNum_arg) {
ㅤㅤDataSet = new double[DataNum]; ←★ここがおかしいです。
ㅤㅤint i;
ㅤㅤfor (i = 0; i < DataNum; i++) {
ㅤㅤㅤㅤDataSet[i] = DataSet_arg[i];
ㅤㅤ}
ㅤㅤDataNum = DataNum_arg;
}

引数 DataNum_arg によって初期化される前の this->DataNum が使用されています。未初期化変数の参照なので結果は不定です。

■修正方法
DataNum = DataNum_arg;
の行をコンストラクタの1行目に移動しましょう。

または、コンストラクタなので以下のように初期化することも出来ます。
cluster::cluster(double *DataSet_arg, int DataNum_arg) : DataNum(DataNum_arg)
{
~~

質問した人からのコメント

2017/1/13 23:49:23

上手くいきました. 詳しく教えていただきありがとうございます.

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる