C++の末尾のコードを動かすと下記のようなエラーが出ます。
同じような質問をしたところメンバ参照を不完全型で行う事は不可能とのことだったのでmerge関数をメンバ関数から外しました。
解決法をお願いします。
prog.cc: In function 'void merge(vertex&, vertex&)': prog.cc:16:11: error: request for member 'dst' in 'e.edge::rev', which is of pointer type 'edge*' (maybe you meant to use '->' ?) 16 | e.rev.dst=&a; | ^~~
C++
1#include <vector> 2struct edge; 3 4struct vertex { 5 std::vector<edge> edges; 6}; 7 8struct edge { 9 vertex *dst; 10 edge *rev; 11}; 12 13void merge(vertex &a,vertex &b) { 14 for (edge &e:b.edges) { 15 a.edges.push_back(e); 16 e.rev.dst=&a; 17 } 18}
> 同じような質問をしたところメンバ関数では不可能とのことだったので
そんな回答をした覚えはないのですが。
すみません、修正します。
> メンバ参照を不完全型で行う事は不可能とのことだったので
だから「不完全型にしないようにする」のが前回の回答です。
修正しました。
クラス定義が終わった後にmerge関数を置いているのでこの質問では完全型になっていませんでしょうか?
それは間違いないですが、前回回答した「宣言の順序を入れ替える」でなく別な手法にした理由が気になります。
(やりたいことの全貌が見えていないので、細切れの質問・回答になってしまっているようにも思えます。細かな挙動の落ち穂拾いをしているのでなければ、「大目的」を示したほうが速いかと思います)
そうですね。質問を書き換えます…。
回答1件
あなたの回答
tips
プレビュー