Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
bigar
53 / 53 / 23
Регистрация: 18.02.2011
Сообщений: 146
#1

Ошибка при перегрузке + - C++

10.09.2011, 14:34. Просмотров 488. Ответов 9
Метки нет (Все метки)

Что не так?
error C2601: Matrica::operator +: недопустимые локальные определения функций
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma once
class Matrica
{
public:
     int n;
     float ** a,**b,**c;
     Matrica(int m=1);
     Matrica(Matrica&);
     ~Matrica(void);
     void Vvod();
     void Vivod();
     Matrica operator + (Matrica&);
};
C++
1
2
3
4
5
6
7
8
9
Matrica Matrica :: operator + ( Matrica& b)//Здесь Error
{ 
    Matrica is(n);
    int i,j;
     for(i=0;i<n;i++) 
     for(j=0;j<n;j++) 
     is.a[i][j]=is.a[i][j]+is.b[i][j];
     return is;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2011, 14:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при перегрузке + (C++):

Ошибка при перегрузке оператора + - C++
Имеется класс, который представляет из себя строку и количество символов в ней. Задача - перегрузить оператор +, чтобы он складывал нам две...

Ошибка при перегрузке операторов. - C++
Здравствуйте! Возникла необходимость создать свой класс-обертку для работы с большими числами. Бибилиотека mpir=порт GMP. Пример рабочий:...

Ошибка при перегрузке функций - C++
Помогите, пожалуйста. Вылетает ошибка floating point stack check на строчке 16 кода (код ниже). Summa.Real=a.Real+b.Real; Не могу понять,...

Ошибка при перегрузке операторов - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; class fraction { public: int numerator; int denominator; fraction(); ...

Ошибка при перегрузке оператора >> - C++
Приветствую. Есть 2 класса: enum Color { white = 1, red, green, blue, yellow }; class Shape { protected: Color figureCol; ...

Ошибка при перегрузке оператора cin >> - C++
#include &lt;iostream&gt; using namespace std; /////////////////////////////////////////////////////////// class fraction { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
Заблокирован
Автор FAQ
10.09.2011, 14:46 #2
Перегружать + нужно для 2-х вариантов
матрица + число
матрица + матрица

Сейчас накидаю код

Добавлено через 3 минуты
Лови - тут умножение и деление (выжимки из моего CMatrix)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#ifndef CMATRIX_H
#define CMATRIX_H
 
#include <math.h>//Подключение прототипов математических функций
 
class CMatrix
{   
public:
    int m, n;
    double **MATRIX;
    CMatrix(){m = 0; n = 0; MATRIX = NULL;}
    CMatrix(int _m, int _n)
    {
        m = _m; 
        n = _n; 
        MATRIX = new double * [m*n];
        for(int i = 0,j; i < _m; i++)
        {
            MATRIX[i] = new double[n];
            for(j = 0;j < _n; j++)
                MATRIX[i][j] = 0;
        }
    }
    CMatrix(int _m, int _n, double ** _MATRIX)
    {
        m = _m; 
        n = _n;
        MATRIX = _MATRIX;
    }
 
    CMatrix operator+(double val);//матрица + число
    CMatrix operator*(double val);//матрица * число
 
    CMatrix operator+(CMatrix val);//матрица + матрица
    CMatrix operator*(CMatrix val);//матрица * матрица
};
 
CMatrix
CMatrix::operator +(double val)
{
    for(int i = 0,j; i < m; i++)
        for(j = 0; j < n; j++)
            MATRIX[i][j] += val;
    return CMatrix(m,n,MATRIX);
}
 
CMatrix
CMatrix::operator *(double val)
{
    for(int i = 0,j; i < m; i++)
        for(j = 0; j < n; j++)
            MATRIX[i][j] *= val; 
    return CMatrix(m,n,MATRIX);
}
 
CMatrix
CMatrix::operator+(CMatrix val)
{
    if(val.m == m && val.n == n)
    {
        for(int i = 0,j; i < m; i++)
            for(j = 0; j < n; j++)
                MATRIX[i][j] += val.MATRIX[i][j]; 
    }
    return CMatrix(m,n,MATRIX);
}
 
CMatrix
CMatrix::operator*(CMatrix val)
{
    CMatrix RetVal;
    if(n == val.m)
    {
        RetVal = CMatrix(m,val.n);
        for(int i = 0,j,s; i < m; i++)
            for(j = 0; j < val.n; j++)
                for(s = 0; s < n; s++)
                    RetVal.MATRIX[i][j] += MATRIX[i][s]*val.MATRIX[s][j];
    }
    return RetVal;
}
 
#endif
bigar
53 / 53 / 23
Регистрация: 18.02.2011
Сообщений: 146
10.09.2011, 14:55  [ТС] #3
СПС))
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
10.09.2011, 16:33 #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
матрица + число
матрица + матрица
Компилятор сообщает явно не об этом. Да и к тому же что-то не помню я такой математической операции, как сложение матрицы с числом.

bigar, компилятор сообщает вам, что вы пытаетесь описать функцию в теле другой функции. В С++ так делать нельзя, функции надо определять только в глобальной области видимости (в случае методов можно также это делать в теле класса).
-=ЮрА=-
Заблокирован
Автор FAQ
10.09.2011, 16:45 #5
Цитата Сообщение от silent_1991 Посмотреть сообщение
Да и к тому же что-то не помню я такой математической операции, как сложение матрицы с числом.
это значит к каждому элементу матрицы прибавить это число.
Как наглядный пример привожу сложение матрицы с числом посредством MathCAD

PS:Есть ещё умножение матрицы на число и деление...
Миниатюры
Ошибка при перегрузке +  
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
10.09.2011, 16:58 #6
-=ЮрА=-, умножение на число - да. Деление - то же умножение, только на обратное число. Однако про математическую операцию "сложение матрицы с числом" (именно с математической точки зрения), повторяюсь, не слышал. Хотя и понятно, что это сложение каждого элемента матрицы с этим числом.
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
10.09.2011, 17:00 #7
silent_1991, думаю, что это всего лишь символическая запись, некое "упрощение", вроде того, как единичную матрицу иногда записывают в виде циферки 1, а если смотреть формально, то такой операции в пространстве матриц как сложение матрицы со скаляром не существует.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
10.09.2011, 17:03 #8
Цитата Сообщение от Ma3a Посмотреть сообщение
такой операции в пространстве матриц как сложение матрицы со скаляром не существует
О чём и я))

Цитата Сообщение от Ma3a Посмотреть сообщение
как единичную матрицу иногда записывают в виде циферки 1
Такого, кстати, тоже не встречал. Знаю, что единичную матрицу принято обозначать как E, нулевую как O. Ну да ладно, всё это начинает попахивать оффтопом))
-=ЮрА=-
Заблокирован
Автор FAQ
10.09.2011, 17:43 #9
Число в данном случае следует воспринимать как некую мнимую матрицу аналогичного с исхоной размера (все элементы равны числу), где-то так
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
10.09.2011, 19:45 #10
Аргументом для этих операторов следует сделать const CMatrix & val, а не CMatrix val.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2011, 19:45
Привет! Вот еще темы с ответами:

Ошибка при перегрузке операторов в классе - C++
Я создал класс myNVector для работы с векторами произвольного размера: в заголовочном файле: class myNVector { public: ...

Ошибка при перегрузке оператора вывода в файл - C++
Добрый день, есть такой кусок кода: #include &lt;iostream&gt; #include &lt;ostream&gt; using std::ostream; using namespace std; ...

Ошибка в перегрузке оператора - при работе с массивами - C++
Текст программы: #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; class array { public: array(); ...

Ошибка при перегрузке инкремента для двумерного массива - C++
Собственно перегружаю вот так: cDoubleArray &amp;cDoubleArray::operator++ () { for(int i = 0; i &lt; this-&gt;row; i++) for(int j...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.09.2011, 19:45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru