我正在尝试在模板动态数组中重载[]运算符,但是它似乎没有做任何事情?
我为学校创建了一个模板化的动态数组,我尝试将重载分离到类之外。
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
。 最佳答案
您正在返回的指针不是您想要的。您应该这样做:
T& operator [] (const int& index)
{
return m_Data[index];
}
另外,
myArray
是一个指针,您必须在使用之前取消引用它。int test = (*myArray)[2];
最好不要使用指针:
int main()// suggested by @user4581301
{
DynArray<int> myArray;
//runs the create function
myArray.CreateArray();
int test = myArray[2];
return 0;
}
这里没有理由使用指针。
代替
new
和delete
进行动态分配,最好使用smart pointer
。这里还有一个问题,您不是在限制范围,而如果索引是负数怎么办。
关于c++ - 模板化动态数组中的运算符重载[],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56642699/