2013-07-01 67 views
0

我有C++中的相當簡單的代碼,那就是:C2894沒有任何 '的extern'

namespace Phoenix 
{ 
    template<typename T> 
    struct Ref 
    { 
    private: T* _instance; 
    public: inline Ref(T* instance) { ... } 
    public: inline Ref(const Ref<T> &reference) { ... } 
    public: inline Ref<T>& operator=(const Ref<T> &reference) { ... } 
    }; 
} 

此代碼是在Visual 2012 C++庫。

現在,如果我嘗試在最終應用程序中重複使用它,則會發生C2894錯誤,說我無法聲明具有'C'鏈接的模板。好。

我沒有使用extern 'C' ...

任何想法?我錯過了什麼嗎?

+0

你在最後一個'}之後缺少一個分號,但是它在VS2012項目中編譯得很好。你可能在.c而不是.cpp中使用它? –

+0

我嚴重地複製/粘貼了我的代碼,分號就在那裏。此外,此代碼位於.cpp文件中包含的.h文件中。當然,實現是在.h中,因爲它是一個模板結構。 – Hemel

+0

好吧,我讓我的項目與你的項目相匹配 - 我在.h中有上面的代碼,它包含在.cpp中。它編譯得很好,所以我們需要找到你的項目和我的項目有什麼不同。如果你做我做過的事情,你會得到同樣的錯誤嗎?也許你的'#include'在'extern「C''裏面? –

回答

1

感謝羅傑羅蘭,我修復了我的解決方案中的錯誤。

我給一個文件命名爲"String.h",它使用了我的模板struct Ref。

由於它在我的項目中默認存在另一個名爲<string.h>的文件(來自C++ STL),所以編譯器使用了這個文件而不是我的文件,所以就出現了這個錯誤。

第一個簡單的重命名解決了問題。