郵便配達の履歴を記録するプログラムを試作している途中に問題が発生。
試作途中のため作りが稚拙なのは御容赦いただけると幸いである。
まずは以下にソースコードを示す。
c++
1#include"iostream" 2#include"string" 3using namespace std; 4class Packet{ 5 string name,sendP,relayP,receiveP; 6public: 7 Packet(string p1,string p2,string p3,string p4):name(p1),sendP(p2),relayP(p3),receiveP(p4){}; 8 Packet():name("noname"),sendP("nowork"),relayP("nowork"),receiveP("nowork"){}; 9 void send(Packet a,Packet b,string p){ 10 cout<<"("<<name<<")->"<<a.getName()<<"に"<<b.getName()<<"へ内容「"<<p<<"」の配達を依頼"<<endl; 11 a.relay(b,name,p); 12 sendP=p; 13 } 14 void relay(Packet c,string postal,string p){ 15 cout<<"("<<name<<")->"<<postal<<"から配達受領、"<<c.getName()<<"に「"<<p<<"」を転送"<<endl; 16 c.receive(name,p); 17 relayP=p; 18 } 19 void receive(string postal,string p){ 20 cout<<"("<<name<<")->"<<postal<<"から「"<<p<<"」を受領"<<endl; 21 receiveP=p; 22 } 23 void work()const{ 24 cout<<"("<<name<<")->"<<"配達依頼「"<<sendP<<"」、転送「"<<relayP<<"」、受領「"<<receiveP<<"」"<<endl; 25 } 26 string getName(){return name;} 27 void setName(string n){name=n;} 28}; 29int main(){ 30 Packet k1("k1","null","null","null"); 31 Packet k2("k2","null","null","null"); 32 Packet k3("k3","null","null","null"); 33 k1.send(k2,k3,"Apple"); 34 cout<<"以下配達明細"<<endl; 35 k1.work(); 36 k2.work(); 37 k3.work(); 38 return 0; 39} 40
次に実行結果を示す。
c++
1(k1)->k2にk3へ内容「Apple」の配達を依頼 2(k2)->k1から配達受領、k3に「Apple」を転送 3(k3)->k2から「Apple」を受領 4以下配達明細 5(k1)->配達依頼「Apple」、転送「null」、受領「null」 6(k2)->配達依頼「null」、転送「null」、受領「null」 7(k3)->配達依頼「null」、転送「null」、受領「null」
本来は以下のようになってほしい。
c++
1(k1)->k2にk3へ内容「Apple」の配達を依頼 2(k2)->k1から配達受領、k3に「Apple」を転送 3(k3)->k2から「Apple」を受領 4以下配達明細 5(k1)->配達依頼「Apple」、転送「null」、受領「null」 6(k2)->配達依頼「null」、転送「Apple」、受領「null」 7(k3)->配達依頼「null」、転送「null」、受領「Apple」
代入はソースコードの17,21行目でされているはずで、実際そこにcoutを入れてそれぞれの中身を表示させると代入できていることが確認できた。
しかし、配達明細の部分でアクセサを用いて中身を呼び出すと初期値であるnullのままとなっている。
このような挙動となる理由、原因が知りたいと存ず。
利用環境により変わるものではないと考えるので利用環境明記略。
初め、ネットでの検索を試みたがどのように検索ワードを入れたら答えにたどり着くかが思い浮かばなかった(いくつかは試したが望む答えが得られなかった)ため、何か良い案をご存じの方は教えていただけると幸いである。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/18 19:00