[英]No such operator “[]” matches these operands
我正在嘗試制作一個程序,演示針對CS類使用模板和重載運算符的情況。 這是相關代碼:
主要:
ArrayTemplate<int> number(0);
number[0] = 1;
number[1] = 2;
number[2] = 3;
ArrayTemplate<string> word("na");
word[0] = "One";
word[1] = "Two";
word[2] = "Three";
標頭:
template<class T>
T& operator [](const int index)
{
if(index >= 0 && index < ARRAY_MAX_SIZE)
return items[index];
else
{
cerr << "INDEX OUT OF BOUNDS!!!";
exit(1);
}
}
問題是,當我嘗試使用重載的下標運算符時,出現標題所示的錯誤消息:“沒有這樣的運算符“ []”與這些操作數匹配“我不確定原因。 它對我的整數數組和我的字符串數組都適用。 任何幫助表示贊賞。
您確實需要顯示ArrayTemplate
的完整定義。
您可能希望它看起來像這樣:
template<class T>
class ArrayTemplate {
public:
// ...
T& operator [](const int index)
{
if(index >= 0 && index < ARRAY_MAX_SIZE)
return items[index];
else
{
cerr << "INDEX OUT OF BOUNDS!!!";
exit(1);
}
}
// ...
};
注意, operator[]
沒有模板化; 只有班級。
使用您當前的代碼,您將必須像這樣:
number<int>[0] = 1;
number<int>[1] = 2;
number<int>[2] = 3;
這顯然違背了您的意圖。
template<class T>
T& operator [](const int index)
該聲明將被稱為例如object.operator[] < type >( 5 )
。 請注意,需要將type
作為模板參數提供。 因為無法使用[]
在表達式中提供這樣的參數,所以運算符重載不起作用。
可能您根本根本不需要template< class T >
。 擺脫它:
T& operator [](const int index)
如果您在class {}
范圍之外定義函數,則它將看起來像這樣:
template<class T>
T& ArrayTemplate<T>::operator [](const int index)
在這種情況下, template<class T>
行重新引入了參數,以便返回到類模板。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.