LINUX.ORG.RU

Трабл с C++


0

0

class DMatrix
{
 [...]
         double **pointer;
 [...]
         double* operator[] (int i) { return  *(pointer+i); }
 [...]
}
 [...]
ostream& operator<< (ostream& p, const DMatrix& matr)
{
        for(int i=0;i<matr.X;i++)
        {       p << "\n[";
                for(int j=0; j<matr.Y ; j++)
                        p<< "\t" << matr[i][j];
                p << "\t]";
        }
        return p;
}
[...]

% make
i386-mingw32msvc-g++ main.cpp
main.cpp: In function `class ostream & operator <<(ostream &, const DMatrix &)':

main.cpp:146: passing `const DMatrix' as `this' argument of `double * DMatrix::o
perator [](int)' discards qualifiers
*** Error code 1

Stop in /flash/lab2_4.


Пожалуйса расскажите в чем я не прав?
★★

class DMatrix
{
[...]
double **pointer;
[...]
double* operator[] (int i) { return *(pointer+i); }
const double* operator [] (int i) const { return *(pointer+i)}
[...]
}

phrm ★★
()
Ответ на: комментарий от phrm

т.е. надо добавить есче один оператор [], который является const-функцией, и который возвращает указатель на const-значение

phrm ★★
()
Ответ на: комментарий от phrm

СПАСИБО ТЕБЕ БОЛЬШОЕ!!!

Не мог бы ты какую-нить книжонку посоветывать? А то мы ща в инсте пишем в BorlandC где все работает. Где даже понятия о namespace нет.

Изчо раз СПАСИБО БОЛЬШОЕ!!!

ASM ★★
() автор топика
Ответ на: комментарий от ASM

Bruce Eckel, Thinking in C++

http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html

Самая, на мой взгляд, полезная книга по С++, ориентированная на публику, которая как-то програмирует на С++, и хочет делать это намного лучше. Есть как и в печатном варианте, так и в форматах HTML и PDF (свободно скачиваются).

Удачи

phrm ★★
()
Ответ на: комментарий от ASM

кстати, а namespace-ы здесь ни причем, просто мы создали две различние функции: operator [] и operator [] const

phrm ★★
()

Для константного объекта нельзя вызывать методы, которые не-const. Очень простое правило. Константный метод не может изменять содержимое объекта, если они не mutable, не может вызывать неконстантные методы. Для отмены константности есть ровно один способ: const_cast<>().

Casus ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.