私の思考がどこに欠陥があるのか正確にはわからないので、たぶんあなたは私のために何かをクリアすることができるでしょう。最初のいくつかのコード:
Talker.h:
class talker
{
public:
talker();
void sayHello() {cout << "Hello";} ;
};
anotherClass.h:
class anotherClass
{
public:
anotherClass();
void doSomethingYourself() { cout << "will do"; };
void askHimToSayHello() { pointerToTalker->sayHello; };
//Access violation, bad pointer(?)
};
common.h:
static talker *pointerToTalker;
// if I add here "= new talker", code works fine
main.cpp:
#include "common.h"
int main()
{
pointerToTalker = new talker; // Here is the bug, but why?
pointerToTalker -> sayHello; // says Hello alright
anotherClass *pointerToAnotherClass = new anotherClass;
pointerToAnotherClass -> doSomething (); //Does something OK
pointerToAnotherClass -> askHimToSayHello(); // Causes access violation
}
もちろん、関数はもう少し複雑で、それぞれが「common.h」を含む対応する.cppに実装されています。私の質問は-main()内で初期化された場合、pointerToTalkerがanotherClass :: AskHimToSayHello()内で機能しないのはなぜですか?そこで使用されるまでに、有効なメモリを指している必要があります。私の「Helloworld、OOP!」です。ところで、私に希望がない場合は、優しくしてください:)
ちなみに子供っぽいスタイルでごめんなさい。全体像を失うことなく、必要なコードをよりコンパクトなものに削減するのに役立ちます:)。