c++操作符重载[]

C++ operator overloading []

本文关键字:重载 操作符 c++      更新时间:2023-10-16

我在c++中有一个小问题…我需要这样做,因为从工作到上学。

我有一个名为Catalog的模板

template <typename T>
class Catalog
{
    struct Item{
        T* _product;
        unsigned int _amount;
        Item* _next = nullptr;
    };
    Item* _head;
    Item* _actual;
    Item* _last;
    int _size;
    void init()
    {
        this->_size = 0;
        this->_head = nullptr;
        this->_actual = nullptr;
    };
public:
    Catalog(void)
    {
        this->init();
    };
    T*& operator[](unsigned int){
        Item* node = this->_head;
        for (int i = 0; i < this->_size; i++)
        {
            if (i == pos)
            {
                return &node->_product;
            }
            node = node->_next;
        }
        return nullptr;
    };
};

这是一个结构,我有项目,在项目我有指针指向下一个数组..

我试着喜欢这个

Catalog<Products> *catalog = new Catalog<Products>();
Products *pr1 = new ProductA(5, "jmeno", 5);
catalog->Add(pr1, 5);
Products* ct = catalog[0];

在我的情况下,visual studio报告这个错误

IntelliSense: no suitable conversion function from SemestralniPrace::Catalog<Products>" to "Products *" exists  

我想纠正操作符[],所以我可以使用我的目录,就像我需要…或者更正main..

中的代码。

这是一个例子,我在类目录中有一些更多的函数,但这对这个问题并不重要。

有人能帮我一下吗?甚至建议对我也有好处。我对这个已经绝望了。

谢谢,对不起,我的英语不是我的母语

你有两个错误。第一个是相对于operator []的返回语句的。表达式&node->_product的类型为T**,而运算符的返回类型为T*&

你只需要写

return node->_product;
第二个错误与语句 有关。
Products* ct = catalog[0];

你必须写

Products* ct = ( *catalog )[0];

Products* ct = catalog[0][0];