異なるクラス間での、vectorのコピーについて – プログラミング – Home

異なるクラス間での、vectorのコピ...
 
通知
すべてクリア

[解決済] 異なるクラス間での、vectorのコピーについて


ペンキ塗りたて
 ペンキ塗りたて
(@ペンキ塗りたて)
ゲスト
結合: 16年前
投稿: 2
Topic starter  

お世話になります。
異なるクラス間で、同じ型のvectorをコピーしたいのですが
下記のように、書きましたが、クラスのメンバー変数にすると、値の受け渡しが
できません、巧い方法はないでしょうか、ご教示願えないでしょうか。

#include <iostream>
#include <string>
#include <vector>

using namespace std;

struct Lineedit{
int line_num;
string instruction;
};
// vector <Lineedit> lhs; // グローバルに置けばOK

class Foo
{
public:
vector <Lineedit> lhs;
void DataSet();
vector <Lineedit>& GetData();
};

void Foo::DataSet()
{
Lineedit le;
le.line_num = 1;
le.instruction = A;
lhs.push_back(le);
le.line_num = 2;
le.instruction = B;
lhs.push_back(le);
}

vector <Lineedit>& Foo::GetData()
{
return lhs;
}

class Hoge
{
public:
Foo foo;
vector <Lineedit> rhs; // クラスのメンバー変数にすると、値の受け渡しができない。
void SetData();
};

void Hoge::SetData()
{
rhs.assign(foo.GetData().begin(), foo.GetData().end());
}

int main()
{
Foo foo; Hoge hoge;
foo.DataSet();
hoge.SetData();
cout << hoge.rhs[0].line_num << hoge.rhs[0].instruction << endl;
cout << hoge.rhs[1].line_num << hoge.rhs[1].instruction << endl;

return 0;
}


引用未解決
トピックタグ
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

クラスと変数が区別ついてないからでしょ。

以下は理由

void Hoge::SetData()
{
rhs.assign(foo.GetData().begin(), foo.GetData().end());
/*
このHoge::SetDataからは、
main関数が呼ばれたらスタック上に作成され
そしてmain関数が終わると消えてしまう
foo変数にアクセスできない。
そもそもfooの存在すら知らない。
*/
}

int main()
{
Foo foo; Hoge hoge;
省略
}

たぶんこういうことかな。
動作確認はしてない。

void Hoge::SetData(vector<Lineedit>& als)
{
rhs.assign(als.begin(), als.end());
}

int main()
{
Foo foo; Hoge hoge;
foo.DataSet();
hoge.SetData(foo.GetData());
省略
}


返信引用
ペンキ塗りたて
 ペンキ塗りたて
(@ペンキ塗りたて)
ゲスト
結合: 16年前
投稿: 2
Topic starter  

wclrp ( 'o') さん、ありがとうございました。
良く理解できました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました