我需要實現以下接口C++ - 向前聲明和別名(使用或類型定義)
struct mutex;
struct interface
{
//...
mutex& getMutex();
};
直覺會,我可以在我的實現使用using mutex = ParticularMutex
,但GCC告訴我,否則:
error: conflicting declaration ‘using mutex = ’
error: ‘class mutex’ has a previous declaration as ‘class mutex’
我不是定義兩次東西,只有聲明兩倍,像往常一樣向前時宣佈,所以
- 爲什麼不能正常工作?
- 有沒有修改的解決方法
interface
? interface
應該怎麼定義?與template <typename mutex>
?
不過,我不明白爲什麼編譯器應該關心。我想知道爲什麼沒有一種方法可以轉發宣稱「這個名稱代表_some_類型」的聲明,現在你不需要知道確切的定義,但是你可以在鏈接時獲得它「 – ricab
@ricab編譯器關心因爲這是標準要求的。不管它是否有用,或者是否應該有某種方式來轉發 - 聲明類型別名,都是一個不同的問題。坦率地說,一個模板參數就是這樣的:它告訴'interface'你稍後會提供一些類型(或類型別名)。 –
@ricab我用一個可能的解決方案更新了答案,檢查它是否適用於您。 –