С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для bigar
53 / 53 / 36
Регистрация: 18.02.2011
Сообщений: 146

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

10.09.2011, 14:34. Показов 971. Ответов 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;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.09.2011, 14:34
Ответы с готовыми решениями:

Ошибка при перегрузке оператора <<
class Predmet { private: int id; string name; public: Predmet() {}; Predmet(string name, int id) : name{ name }, id { id...

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

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

9
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
10.09.2011, 14:46
Перегружать + нужно для 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
1
 Аватар для bigar
53 / 53 / 36
Регистрация: 18.02.2011
Сообщений: 146
10.09.2011, 14:55  [ТС]
СПС))
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.09.2011, 16:33
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
матрица + число
матрица + матрица
Компилятор сообщает явно не об этом. Да и к тому же что-то не помню я такой математической операции, как сложение матрицы с числом.

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

PS:Есть ещё умножение матрицы на число и деление...
Миниатюры
Ошибка при перегрузке +  
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.09.2011, 16:58
-=ЮрА=-, умножение на число - да. Деление - то же умножение, только на обратное число. Однако про математическую операцию "сложение матрицы с числом" (именно с математической точки зрения), повторяюсь, не слышал. Хотя и понятно, что это сложение каждого элемента матрицы с этим числом.
0
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
10.09.2011, 17:00
silent_1991, думаю, что это всего лишь символическая запись, некое "упрощение", вроде того, как единичную матрицу иногда записывают в виде циферки 1, а если смотреть формально, то такой операции в пространстве матриц как сложение матрицы со скаляром не существует.
1
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.09.2011, 17:03
Цитата Сообщение от Ma3a Посмотреть сообщение
такой операции в пространстве матриц как сложение матрицы со скаляром не существует
О чём и я))

Цитата Сообщение от Ma3a Посмотреть сообщение
как единичную матрицу иногда записывают в виде циферки 1
Такого, кстати, тоже не встречал. Знаю, что единичную матрицу принято обозначать как E, нулевую как O. Ну да ладно, всё это начинает попахивать оффтопом))
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
10.09.2011, 17:43
Число в данном случае следует воспринимать как некую мнимую матрицу аналогичного с исхоной размера (все элементы равны числу), где-то так
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
10.09.2011, 19:45
Аргументом для этих операторов следует сделать const CMatrix & val, а не CMatrix val.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.09.2011, 19:45
Помогаю со студенческими работами здесь

Ошибка при перегрузке оператора ==
У меня компилятор выдает ошибку error LNK2019: ссылка на неразрешенный внешний символ &quot;bool __cdecl operator==(class Time &amp;,class...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru