Здравствуйте, Nexie, Вы писали:
NBN>>В приведенной конструкции все нормально, видимо ты не все привел.
N>Нашел тот кусок кода, который не компилился.
N>Вот как оно выглядело на самом деле:
N>N>class SampleClass
N>{
N> private:
N> double *m_Data;
N> public:
N> double& operator[](const int index) { return m_Data[index]; }
N>};
N>void f(const SampleClass& x)
N>{
N> SampleClass y;
N> int i,j; double a;
N> y[j] = y[j] + x[i]*a; // вот тут ОНО хочет оператор "+"
N> // ^
N> // E2094 'operator+' not implemented in type 'SampleClass' for arguments of type 'int'
N>}
N>
Comeau говорит (и правильно, на мой взгляд) об использовании неинициализированных переменных i и j (но это предупреждение) и о том, что operator[] для const SampleClass не определен (а это ошибка).
Вот такой код компилируется без ошибок:
class SampleClass
{
private:
double *m_Data;
public:
double operator[] (const int index) const{ return m_Data[index]; }
double& operator[] (const int index) { return m_Data[index]; }
};
void f(const SampleClass& x)
{
SampleClass y;
int i=0,j=0; double a;
y[j] = y[j] + x[i]*a; // и вот тут ОНО (comeau) не хочет оператор "+"
}
Почему Ваш компилятор ругается на operator+()?. Да кто ж его знает...