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

Subscript requires array or pointer type - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Уничтожение динамического массиа строк http://www.cyberforum.ru/cpp-beginners/thread277810.html
Собсно вот метод: //for(int i=0;i<=n;i++) //delete charr; //delete charr; НО в моей програме он выбивает ошибку(компилируется нормально) (задача - добавить строку, после строки наибольшей...
C++ Связные списки Вот есть код все работает отлично но препод сказал что-бы при вводе элементов в список элементы сортировались вот к примеру 20 5 8 12 1 10 11 а должно быть 1 5 8 10 11 12 20 это задача про казнь она... http://www.cyberforum.ru/cpp-beginners/thread277809.html
C++ Отлов рисунка
по экрану "бегает" рисунок, его положение определяется программой, необходимо считать из программы координаты этого рисунка. Не подскажите с чего начать ?
C++ Подсчитать появление строчных букв...
Дан текстовый файл. Подсчитать число появлений в нем каждой строчной (то есть маленькой) латинской буквы и создать строковый файл, элементы которого имеют вид «<буква>–<число ее появлений>» (напри-...
C++ Как удалить объект по указателю на базовый класс? http://www.cyberforum.ru/cpp-beginners/thread277794.html
Допустим есть несколько классов: // абстрактный класс - введен для управления наследниками class A{ ... } // рабочий класс 1 class B: virtual public A{ ...
C++ (CИ)26. Определить сколько раз последовательность из N произвольных чисел меняет знак (СИ)Определить сколько раз последовательность из N произвольных чисел меняет знак подробнее

Показать сообщение отдельно
azaron
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 14

Subscript requires array or pointer type - C++

17.04.2011, 02:51. Просмотров 2445. Ответов 1
Метки (Все метки)

Задание
Нужно перегрузить операции для квадратной матрици
Операции: - =, * =.
но у меня не виходит ето зделать, подскажите, пожалуйста, в чем ошибка

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Matrix.h
#include <iostream>
#include <stdlib.h>
using namespace std;
class Matrix
{
        friend istream& operator >>(istream& , const Matrix&Arr);
        friend ostream& operator <<(std::ostream&, const Matrix&Arr); 
        int*ptr;
        int size;
public:
        Matrix(int s=10);
       Matrix(Matrix &arr);
        virtual~Matrix();
 
        void Rindomize(int num = 10);
        Matrix &operator-(Matrix &arr);
        Matrix &operator=(Matrix &arr);
        Matrix &operator-=(Matrix &arr);
        Matrix &operator*=(Matrix &arr);
        
};
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//Matrix.cpp
#include "Matrix.h"
 
Matrix::Matrix(int s)
{
        size=s;
        int **ptr = new int *[size];  
        for (int i = 1; i <= size; i++ )
            {
                  if ((ptr[ i ] = new int [size]) == NULL) 
                  cout << "Error\n";
            }
 
         for(int i = 0; i < size; i++)
            for(int j=0; j<size; j++)
        {
                ptr[i][j] = 0;
        }
        cout << "Constructor" << endl;
}
//--------------------------------------------------------------------------------
Matrix::Matrix(Matrix& arr)
{ 
        size = arr.size;
        int **ptr = new int *[size];  
        for (int i = 1; i <= size; i++ )
            {
                  if ((ptr[ i ] = new int [size]) == NULL) 
                  cout << "Error\n";
        }
                 for(int i = 0; i < size; i++)
            for (int j=0; j<size; j++)
        {
                ptr[i][j] = arr.ptr[i][j];
                
        }
        
        cout << "Copy Constructor" << endl;
}
//--------------------------------------------------------------------------------
Matrix::~Matrix()
{
        delete[] ptr;
        cout << "Destructor" << endl;
}
//--------------------------------------------------------------------------------
void Matrix::Rindomize(int num)
{       
        for(int i = 0; i < size; i++)
            for(int j=0; j<size; j++)
        {
                ptr[i][j] = rand() % num;
        }       
}
//--------------------------------------------------------------------------------
ostream& operator <<(ostream& output, const Matrix& Arr)
{
    for(int i=0; i<Arr.size; ++i)
        for(int j=0; j<Arr.size; j++)
        output<<Arr.ptr[i][j]<<" ";
    return output; 
}
//--------------------------------------------------------------------------------
istream& operator >>(istream& input, const Matrix& Arr)
{
    for (int i=0; i<Arr.size; i++)
        input>>Arr.ptr[i];
    return input;
}
//--------------------------------------------------------------------------------
Matrix& Matrix::operator-=(Matrix& arr) 
{
        int mins = (size < arr.size) ? size : arr.size;         
       Matrix temp;
        if(mins == arr.size)
        {
                temp = *this;
                for(int i = 0; i < mins; i++)
                    for (int j=0; j<mins; j++)
                {               
                        temp.ptr[i][j] -= arr.ptr[i][j];
                }
        }
        else
        {       
                temp = arr;
                for(int i = 0; i < mins; i++)
                    for(int j=0; j<mins; j++)
                {               
                        temp.ptr[i][j] -= ptr[i][j];
                }               
        }
        cout << "Operator -=" << endl;
        return temp;
}
 
//--------------------------------------------------------------------------------
Matrix&Matrix::operator= (Matrix & arr)
{
        if(this != &arr)
        {
                delete[] ptr;
                size = arr.size;
                ptr = new int[size];
                for(int i = 0; i < size; i++)
                {
                        ptr[i] = arr.ptr[i];
                }
        }
        cout << "Operator =" << endl;
        return *this;
}
 
//--------------------------------------------------------------------------------
Matrix&Matrix::operator*=(Matrix &arr)
{
    int **tmp = new int *[size];  
        for (int i = 1; i <= size; i++ )
            {
                  if ((tmp[ i ] = new int [size]) == NULL) 
                  cout << "Error\n";
            }
         temp = *this;
                for(int i = 0; i < size; i++)
                    for (int j=0; j<size; j++)
                {               
                    tmp[i][j]=0;
                }
                    for(int i = 0; i < size; i++)
                    for (int j=0; j<size; j++)
                    for(int k=0; k<size; k++)
                      tmp[i][j]+= temp.ptr[i][k] * arr.ptr[k][j];
 
 
                cout<<"Operator *="<<endl;
                return tmp;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//main.cpp
#include "Matrix.h"
#include <conio.h>
#include <time.h>
 
int main()
{
        srand(time(0));
        Matrix a(5);
        a.Rindomize(5);
        Matrix b(7);
        b.Rindomize(5);
        Matrix c;  
        
        cout<<"HugeInt a:\n"<<a<<"\n";
        cout<<"HugeInt b:\n"<<b<<"\n";
 
        c=b;
        a*=b;
        b-=a;
        getch();
        
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru