const, шаблоны и приведение типов. Чего-то я не понимаю
От: Аноним  
Дата: 10.06.11 10:05
Оценка: :)
Есть шаблонный класс с вот таким методом (велосипед для работы с вектором):

template<typename T> class AVector3D {
....
void set ( T &X,  T &Y,  T &Z) {array[1] = X; array[2] = Y; array[3] = Z;}



есть вот такой тестовый пример:


 AVector3D<double> a, q, r;
    double b=3.14;
    q.set(1.0, 1.0, 1.0);
    r.set(1,1,1);

На последнюю строчку ругается как и на предпоследнюю: нет такого метода, который он мог бы вызвать.
Если в объявлении метода поставить const то все компилируется и работает. Хотелось бы понять, что тут не так. Ах да, компилятор — gcc 4.4.5.

Дальше еще хлеще, правда уже сам шаблон не причем. Для данного класса есть перезагруженные методы + и *


   //Умножение скаляра на вектор
    template<typename T> inline AVector3D<T> operator* (T &val, AVector3D<T> &v) {
    AVector3D<T> tempVec = v;
        return tempVec *= val;
    }
        //Сложение векторов
    template<typename T> inline AVector3D<T> operator+ (AVector3D<T> &v1, AVector3D<T> &v2) {
    AVector3D<T> tempVec = v1;
        return tempVec += v2;
    }

и если есть что-то типа такого: a=b+c*d; выпадает в ступор и говорит что нет подходящего оператора присваивания. Если везде const, то проблем нету. Тут скорее всего вопрос почему компилятор, при вычислений выражение создает const-объект, хотя в перегруженном операторе ни одного упоминания const нету.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.