这是一个发生在我身上的例子:
#include <iostream>
using namespace std;
template<class key, class value> //пара с двумя параметрами - ключ и значение
struct pairs
{
key Key;
value Value;
};
template<class key, class value>
struct test
{
pairs<key, value>* arr; //указатель для массива пар.
test(const size_t& size) //выделяю памяти для массива пар
{
arr = new pairs<key, value>[size];
}
value& operator[](const key& key) //возвращаю ЗНАЧЕНИЕ
{
return arr->Value[key]; //<=== ошибка всплывает тут
}
};
int main()
{
test<int, int> Example(100);
Example[0] = 0;
cout << Example[0];
}
此错误的原因是什么,我该如何解决?
分析你想做什么:
struct pairs除了作为结构外,其他任何地方都不太可能需要它(因为有一个 std::pair),test所以最好让对成为一个嵌套类,这样它就不会在你的脚下。test获取一个大小并创建一个存储对的大小的数组。但是,这些对没有初始化,这意味着违反了不变量(对象具有某种状态的属性)。构造函数必须以某种方式初始化它们,或者这些对象的构造函数必须这样做。operator[]接受一个键并返回相应的值(创建关联性),您需要在数组中找到一个具有该键的元素并返回其值(如 αλεχολυτ 建议的那样,它不起作用,只能是整数类型数组的索引)。如果没有?那怎么办就看你自己了。我认为您应该然后初始化具有默认值的第一个元素并使用给定的键对其进行初始化。如果数组中的所有元素都已经初始化,那么或者让,例如,运算符什么也不做。自然,通过使用简单数组实现关联数组,它会在速度方面产生此类问题,但对于小型任务,它会起作用......