私はそれを表現する方法が少し奇妙に聞こえますが、それは単に私がどのようにフレーズできるか分かりません。私はA *を実装しようとしています。以前はやっていましたが、私のパスをトレースすることに1つの問題があったので、小さなテストを実行することにしました。問題は、このようなものを行ってきました:メンバー変数と同じタイプのポインタを持つオブジェクトへのポインタを持つことができないのはなぜですか?
私は少しこのようになりますクラスがあります。
class Number {
public:
int xPos;
int yPos;
Number *prevNum;
Number(int x, int y) {
xPos = x;
yPos = y;
}
};
を、main関数で、私は、それを何らかの理由でこの
int main() {
Number n(2, 2);
Number *current = &n;
vector<Number> nums;
nums.push_back(*current);
for (unsigned i = 0; i < 15; i++) {
Number n(current->xPos + 1, current->yPos);
n.prevNum = current;
nums.push_back(n);
current = &n;
cout << current->xPos + 1 << " ";
}
for (unsigned i = 0; i < nums.size(); i++) {
if (nums.at(i).prevNum) {
cout << nums.at(i).prevNum->xPos << " ";
}
}
return 0;
}
を行います
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 555437610 2 17 17 17 17 17 17 17 17 17 17 17 17 17 17
毎回555437610が異なるため、私はエラーが発生する可能性がありますポインタ。メンバー関数* prevNumを無限に入れ子にすることはできませんか?私はそれをどのように記述するのか完全にはわかりません。
あまりにも厄介ではありませんが、クラスが_Number_を表していますか?名前の変更は理にかなっているかもしれません。 – byxor
あなたのコンストラクタは 'prevNum'を' nullptr'に設定するべきです。 –
'n'はforループのローカル変数です。したがって、それらのすべての&nはループ外では定義されていません。 –