2014-09-04 5 views
1

У меня есть класс матрицы с несколькими перегруженными оператором, но мне нужно его расширить. У меня есть ошибка компиляции. Программа игрушки, чтобы показать проблему:Как управлять перегрузкой оператора с наследованием

template<typename T, int R, int C> 
class matrix { 
public: 
    matrix() {}; 
    matrix(const matrix<T,R,C>& rhs) {} 
    matrix<T,R,C> operator+(const matrix<T,R,C>& rhs) { 
       matrix<T,R,C> result(); /*some code*/ return result; 
    } 
    ~matrix() {} 
    matrix<T,R,C>& operator=(const matrix<T,R,C>& rhs) { 
     return *this; 
    } 
}; 

class point: public matrix<double, 1, 2> { 
public: 
    point(); 
}; 

int main() { 
    point p1; 
    point p2, p3; 
    p1 + p2 <---------error 

    p1 = p2 + p3; <-------error 
    return 0; 
} 

Compiler ошибка:

In instantiation of ‘matrix<T, R, C> matrix<T, R, C>::operator+(const matrix<T, R, C>&) [with T = double; int R = 1; int C = 2]’: 
a.cpp:28:13: required from here 
a.cpp:7:93: error: could not convert ‘result<double, 1, 2>’ from ‘matrix<double, 1, 2> (*)()’ to ‘matrix<double, 1, 2>’ 

ответ

2

досадных разобрать снова.

matrix<T,R,C> result(); 

объявляет функцию с именем result не принимает никаких параметров и возвращает matrix<T,R,C>. Выньте парнеров.


Когда я пытаюсь расширить класс я хочу вернуться из operator+() и т.д. объекта дочернего класса.

Тогда вам нужно дать производному классу свои собственные операторы. Как функция базового класса должна знать, что она фактически работает на производном классе?

Смежные вопросы