私には奇妙な質問があります。とても奇妙なので、おそらく簡単に解決することができます。シングルトンクラスを使用してすべてのクラスから到達する
私はソフトウェアを作成しました。ソフトウェアからすべてのクラスから到達する必要がある歌のオブジェクトでクラスを実装する必要があります。したがって、私はmain関数でシングルトンオブジェクトとして作成しました。
私の問題は、コード内のすべての単一クラスへのポインタによってハンドラされるポインタを作成せずに、オブジェクトがClassAのような他のクラスからどのように到達できるかです。
すべてのクラス定義はsing.hファイルにあります。私がsing.cppファイルに定義を入れると、コンパイラは失敗します。
私はこの歌のオブジェクトを作成することができましたが、ClassAからは見えません。各クラスのコンストラクタへのポインタを渡すことなく、オブジェクトをどのように見せることができますか?
sing.hファイル:
#ifndef _SING_H_
#define _SING_H_
//declaration
class Singleton
{
public:
static Singleton* Instance();
static Singleton* InstanceSlave();
int a;
int setTest(int);
protected:
Singleton(){}
private:
static Singleton* _instance;
static Singleton* _instanceSlave;
};
//definitions (only work in header file, not in .cpp file
Singleton* Singleton::_instance =0;
Singleton* Singleton::Instance()
{
if (_instance == 0)
{
_instance = new Singleton;
}
return _instance;
}
int Singleton::setTest(int b)
{
return 1;
}
#endif _CONF_H_
main.cppにファイル:
int main()
{
Singleton* sing = sing->Instance();
sing->setTest(2);
ClassA* classa = new ClassA();
}
main.hファイル:
#inlucde <iostream>
#include "sing.h"
#include "classA.h"
にClassA内部の私のような何かを持っていると思いますこれは:
classA.h
#inlude sing.h
class classA
{
public:
void doSomeThing(int);
}
classA.cpp:
#include ClassA.h
{
void ClassA::doSomeThing(int a)
{
sing.setTest(a);
}
}
アンダースコアで始まり大文字で始まる各名前は実装に予約されています。 '_SING_H_'を定義するべきではありません。例えば、 'SING_H_'はOKです。 – user2079303