【发布时间】:2019-06-18 06:12:24
【问题描述】:
我正在尝试重载模板化动态数组中的 [] 运算符,但它似乎没有做任何事情?
我为学校创建了一个模板化的动态数组,我尝试将重载分离到课堂之外。
DynArray.h
template <typename T>
class DynArray
{
public:
//The constructor initialises the size of 10 and m_Data to nullptr
DynArray(void)
{
m_AllocatedSize = 10;
m_Data = nullptr;
}
//deletes m_Data
~DynArray()
{
delete[] m_Data;
m_Data = nullptr;
}
T* operator [] (int index)
{
return m_Data[index];
}
//creates the array and sets all values to 0
T* CreateArray(void)
{
m_Data = new T[m_AllocatedSize];
m_UsedElements = 0;
for (int i = 0; i < m_AllocatedSize; ++i)
{
m_Data[i] = NULL;
}
return m_Data;
}
private:
bool Compare(T a, T b)
{
if (a > b)
return true;
return false;
}
T* m_Data;
T* m_newData;
int m_AllocatedSize;
int m_UsedElements;
};
Main.cpp
#include <iostream>
#include "DynArray.h"
int main()
{
DynArray<int>* myArray = new DynArray<int>;
//runs the create function
myArray->CreateArray();
int test = myArray[2];
delete myArray;
return 0;
}
在这种情况下,我希望重载返回 m_Data[2] 处的 int,但它似乎根本没有重载 [],而是显示 no suitable conversion from DynArray<int> to int。
【问题讨论】:
-
您正在创建一个指向单个
DynArray的指针,然后访问不存在的第三个。您可以使用(*myArray)[2]访问[]返回的指针,但请记住,它是一个指针,可能不是您想要的。 -
m_AllocatedSize = 10;和m_Data = nullptr;似乎不对。如果分配的大小是 10,则没有分配任何东西,看起来你正在设置失败。 -
哦等等,它在
CreateArray中。我推荐阅读What is meant by Resource Acquisition is Initialization (RAII)?。它将帮助您编写更健壮的代码,实际上更简单。 -
非常感谢,一定会读一读 :)
标签: c++