程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c++-C++ 類模板的靜態私有內部類如何初始化?

c++-C++ 類模板的靜態私有內部類如何初始化?

編輯:編程綜合問答
C++ 類模板的靜態私有內部類如何初始化?

搞了一個通宵了,百度過很多資料,始終解決不了這個問題。令我開始對C++的繁瑣感到厭倦了。為了編譯通過這麼一個小問題,折騰這麼長時間,真心覺得這種語言繁瑣,刻板,效率低,過時了,讓我這個6年的C++粉開始有點失望……

 #ifndef __SINGLETON__H__
#define __SINGLETON__H__

template <typename T>
class Singleton
{
public:

    static T* GetInstance()
    {
        return m_pInstance;
    }


protected:

    Singleton() {}
    ~Singleton() {}


private:

    Singleton(const Singleton<T> &);
    Singleton& operator = (const Singleton<T> &);

    static T* m_pInstance;

    class Worker  // 這裡在類模板中定義了一個內部類
    {
    public:

        Worker()
        {
            i = 0;
            if ( !m_pInstance )
            {m_pInstance = new T();printf("ccc\n");}

        }

        ~Worker()
        {

            if ( m_pInstance )
            {delete m_pInstance;printf("ddd\n");}

        }
        int i;
    };

    static Worker worker;  // 靜態內部類成員,私有的。為了在類模板實例創建時自動調用此靜態內部類的構造函數,銷毀時自動調用此靜態內部類的析構函數
};

template <typename T> T* Singleton<T>::m_pInstance = NULL;  // 這句編譯通過
template <typename T> Singleton<T>::Worker Singleton<T>::worker;  // 就是這句編譯不通過,糾結了一晚上了,浪費了許多時間,不知道該怎麼寫,求大神們指教。

#define SINGLETON_INIT(Type) friend Type* Singleton<Type>::GetInstance(); private: Type(); ~Type()

#endif

錯誤輸出:
警告 1 warning C4346: “Singleton::Worker”: 依賴名稱不是類型
錯誤 2 error C2143: 語法錯誤 : 缺少“;”(在“Singleton::worker”的前面)

錯誤 3 error C4430: 缺少類型說明符 - 假定為 int。注意: C++ 不支持默認 int

最佳回答:


 template <typename T> Singleton<T>::Worker Singleton<T>::worker;  // 就是這句編譯不通過,糾結了一晚上了,浪費了許多時間,不知道該怎麼寫,求大神們指教。

 加一個typename就能夠通過編譯,改為:
 template <typename T> typename Singleton<T>::Worker Singleton<T>::worker;

最佳回答:


,但有更不可思議的問題出現了,請看新帖。同樣是10分獎勵
lawala012
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved