c++操作符重载[]
C++ operator overloading []
我在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];
相关文章:
- 重载操作符+:表达式必须是整型或无作用域枚举类型
- 重载操作符
- 如何重载操作符==外模板类使用友元函数
- 重载*操作符,使其在左右两边都工作
- 重载操作符<对于非随机迭代器
- 在c++中重载操作符的时间和原因
- 如何在c++中重载=操作符来通过引用进行复制
- 如何在c++中获取定义为友元的重载操作符的地址
- 使用重载操作符的文件操作表达式没有给出预期的结果
- 重载操作符()
- 重载操作符()并在类内使用
- 类中的重载操作符+
- 定时使用重载操作符
- c++带类的重载操作符
- 用列表容器重载[]操作符
- 重载操作符=
- 任何重载操作符()的静态检测
- 重载操作符以处理类对象
- 在使用另一个类的类中重载操作符==
- 派生类和基类中的重载操作符不同