私は最近、Linuxに移植したいコードをいくつか取得しました。ヘッダーファイルでは、私は誰かが光を当てることを願っている好奇心が強いコードを持っています。ヘッダファイルの中で、他のクラスが定義されている名前空間の内部で、私は次のようしている:C++シングルトン作成問題
#define CREATE_SINGLETON_METHODS(s) \
private: \
friend class Singleton<c>; \
##c(); \
virtual ~##c();
私は##
トークン貼り付け操作ですが、私は、なぜ原作者(誰を把握することはできませんことを理解私は知らないし、接触することができない)それを使用した。私はこのようになります実装クラスを持っている:
class MapManager : public Singleton<MapManager> {
CREATE_SINGLETON_METHODS(MapManager)
private:
...
私はコンパイルするとき、私は次のエラーを取得する:
error: pasting ";" and "MapManager" does not give a valid preprocessing token
これは、Windows上で見つけるとgccのいくつかの以前のバージョン(前4コンパイル。バツ)。何がここで起こっている可能性についての任意のアイデア?ありがとう!
これは、プリプロセッサの違いに過ぎません。 – Dolphin
右 - それがポイントです。gcc4のプリプロセッサがトークン「Singleton;」を貼り付けるように見えます「c();」の展開は、 ##演算子を見ると一緒になります。この演算子は不要ですが、単純な修正は単に削除することです。 –
Naaff
デストラクタでのトークンの貼り付けも間違っています。デストラクタの名前は、トークン「〜」とクラス名の順に付けられます。たとえそれらの間に空白を入れずに書かれていても、貼り合わせる必要はありません。 – Doug