-1
我有一個聲明模板函數一個庫:模板與正向類聲明
template <typename T>
void Foo(blah...)
{
class Bar mybar;
...
}
類酒吧是不是在這個庫中定義,但由於它只是一個模板,它不應該在這個時候被實例化;所以通過明確使用class關鍵字,庫成功編譯。
在後面的主程序文件中,我需要實例化此模板,我將該文件包含在Bar類的完整定義中。它使用GCC 4.4.2的工作,但現在升級到了4.8.1,我得到的錯誤:
"Foo(blah...) [with T = blahblah]::Bar mybar has incomplete type"
好像對待酒吧爲模板的功能,而不是一個轉發類中的臨時類聲明的編譯器。我想知道是否有什麼可以解決這個問題,或者這個技巧不應該起作用?要做到這一點的是,Bar類有很多依賴關係,大多數使用我的庫的程序不需要Bar類,所以沒有必要鏈接Bar類依賴的所有額外庫。
TIA
已經嘗試過。它甚至不會讓我編譯庫:「非法使用不完整類型」類Bar'「 – Shine 2015-03-02 05:58:00
我很確定這是有效的,但我的問題是我需要編譯lib而沒有類Bar的定義(即,只有你的示例的上半部分),它將在後面定義,但在實例化之前定義。但是非常感謝您的時間!我想我最好放棄並提出一個新的解決方案。 :-) – Shine 2015-03-02 06:11:28
@Shine,你在說什麼lib?代碼的上半部分在語法上是正確的。只有當你實例化函數模板時,你才需要'Bar'。 – 2015-03-02 06:18:17