「this」ポインタの値を別のポインタに割り当てる簡単な方法を見つけようとしています。これを実行できるようにしたい理由は、すべてのシードの親アップルオブジェクトへの自動ポインターを使用できるようにするためです。親アップルのアドレスをシードに手動で割り当てることができることはわかっています。MyApple.ItsSeed->ParentApple=&MyApple; しかし、私は「this」ポインタを使用してこれをより便利に行う方法を見つけようとしています。これが推奨/可能かどうかを教えてください。そうであれば、私が間違っていることを教えてください。
これは私が今持っているものです:
main.cpp:
#include <string>
#include <iostream>
#include "Apple.h"
#include "Seed.h"
int main()
{
///////Apple Objects Begin///////
Apple MyApple;
Seed MySeed;
MyApple.ItsSeed = &MySeed;
MyApple.Name = "Bob";
MyApple.ItsSeed->ParentApple = &MyApple;
std::cout << "The name of the apple is " << MyApple.Name <<".\n";
std::cout << "The name of the apple's seed's parent apple is " << MyApple.ItsSeed->ParentApple->Name <<".\n";
std::cout << "The address of the apple is " << &MyApple <<".\n";
std::cout << "The address of the apple is " << MyApple.ItsSeed->ParentApple <<".\n";
return 0;
}
Apple.h:
#ifndef APPLE_H
#define APPLE_H
#include <string>
#include "Seed.h"
class Apple {
public:
Apple();
std::string Name;
int Weight;
Seed* ItsSeed;
};
#endif // APPLE_H
Apple.cpp:
#include "Apple.h"
#include "Seed.h"
Apple::Apple()
{
ItsSeed->ParentApple = this;
}
Seed.h:
#ifndef SEED_H
#define SEED_H
#include <string>
class Apple;
class Seed {
public:
Seed();
std::string Name;
int Weight;
Apple* ParentApple;
};
#endif // SEED_H
Seed.cpp:
#include "Seed.h"
Seed::Seed()
{
}
すべてが正常にコンパイルされます。しかし、ItsSeed-> ParentApple=this;のコメントを外すといつでも プログラムは出力を生成せずにクラッシュします。これは、問題を実証するために考案された例です。問題は「this」ポインタの誤用に関連しているように感じます。または、ある種の循環ループに関係している可能性があります。しかし、私にはわかりません。「this」の値を何かに割り当てても、良い結果は得られません。ありがとう。