進行了搜索,但無法找到與我的查詢匹配的內容,這有點特殊,所以在這裏。將運算符從一個模板類轉換爲另一個相關模板類
我有一些模板類(Vector2,Vector3和Vector4)。 試圖定義從Vector2轉換操作者3和4, 和的Vector3至2和4等
template <typename T>
class Vector4 {
// ...
operator Vector2<T>() const { return { x, y }; }
operator Vector3<T>() const { return { x, y, z }; }
// ...
T x, y, z, w;
// ...
}
template <typename T>
class Vector3 {
// ...
operator Vector2<T>() const { return { x, y }; }
operator Vector4<T>() const { return { x, y, z, 0 }; }
// ...
T x, y, z;
// ...
}
template <typename T>
class Vector2 {
// ...
operator Vector3<T>() const { return { x, y, 0 }; }
operator Vector4<T>() const { return { x, y, 0, 0 }; }
// ...
T x, y;
// ...
}
使用Visual Studio 2017給我此:
錯誤C2833:「運算Vector2'不是公認的運營商或類型
任何和所有幫助表示讚賞。
謝謝。
編輯:我的實際源確實有分號後的分號。忘了把它們放在我發佈的簡短版本中。 而且,是的,有很多錯誤,但以我的經驗,它通常是重要的 嘗試着宣佈第一個:
template <class T> class Vector 3;
template <class T> class Vector 4;
template <typename T>
class Vector2 {
// ...
}
編輯:現在,我得到錯誤C2988:無法識別的模板聲明/定義。可能值得一提的是,3個模板類都在單獨的文件中。我最初嘗試在一個類中包含一個頭文件來讓類型轉換操作符工作,這就是給出原始錯誤的原因。
哦,是的。我一定會讓這些明確的。這總是很好的建議。這是當地時間0430雖然... :)
編輯:無所謂,我是一個spaz。我不知道我是如何在向量和「向量2」!=「向量2」的變暗數之間滑入一個空格。它是前向聲明。不能相信我錯過了那麼簡單的事情。 孩子們:不要編碼,當你如此捆綁,其itos noso好。
你可能要考慮申報的經營者[' explicit'](http://en.cppreference.com/w/cpp/language/explicit)。 –
它應該給出更多的錯誤信息。我可以看到你應該至少得到10個......用分號關閉類定義。編譯器在聲明之前無法識別類型。 –