السلام عليكم ورحمة الله وبركاته،،،
كيف حالكم؟
أثناء قيامي بتطبيق على مصفوفة ديناميكية بسيطة، واجهني خطأ لم أعرف سببه أو حله، إليكم الشفرة:
class DArray
{
public:
DArray(int);
~DArray();
int GetNumOfElements() const {return itsNumOfElements;}
void SetNumOfElements(int newNum) { itsNumOfElements=newNum;}
int& operator [] (int);
bool operator == (const DArray&);
bool operator < (const DArray&);
private:
int *itsArray;
int itsNumOfElements;
};
DArray::DArray(int NumberOfElements)
{
itsArray = new int [NumberOfElements];
itsNumOfElements = NumberOfElements;
}
DArray::~DArray()
{
delete [] itsArray;
}
int& DArray::operator [] (int nIndex)
{
return itsArray[nIndex];
}
bool DArray::operator ==(const DArray& comparator)
{
if (this->GetNumOfElements() == comparator.GetNumOfElements())
{
bool equals=true;
for (int counter = 0 ; counter < this->GetNumOfElements() ; counter++)
{
if (this->operator [] != comparator[counter])
{
equals = false;
break;
}
}
return equals;
}
else
return false;
}
bool DArray::operator < (const DArray& comparator)
{
if (this->GetNumOfElements() < comparator.GetNumOfElements())
return true;
else if (this->GetNumOfElements() == comparator.GetNumOfElements())
{
int total1 = 0 , total2 = 0;
for (int counter = 0 ; counter < this->GetNumOfElements() ; counter++)
{
total1 += this->operator [](counter);
total2 += comparator[counter];
}
return (total1 < total2);
}
else
return false;
}يظهر الخطأ التالي:
error C2678: binary '[' : no operator defined which takes a left-hand operand of type 'const class DArray' (or there is no acceptable conversion)
وذلك في السطرين اللذين يتم استدعاء المعامل [] فيهما:
this->operator [] (counter)
فما الحل؟؟
ولكم جزيل الشكر :)

