簡體   English   中英

沒有這樣的運算符“ []”與這些操作數匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM