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

Subscript requires array or pointer type - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.90
azaron
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 14
17.04.2011, 02:51     Subscript requires array or pointer type #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();
        
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2011, 02:51     Subscript requires array or pointer type
Посмотрите здесь:

C++ Ошибка: subscripted value is neither array nor pointer
С++:invalid types 'int[int]' for array subscript C++
invalid types ‘Room [26][26][26][double]’ for array subscript. Помогите разобраться пожалуйста. C++
Error C2109: subscript requires array or pointer type C++
C++ Работа с функциями и ошибка "Subscript requires array or pointer type"
C++ Передача двумерного массива в функцию. Ошибка "invalid types for array subscript"
C++ Ошибка error: invalid types 'int[int]' for array subscript
Error C2109: subscript requires array or pointer C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
17.04.2011, 10:07     Subscript requires array or pointer type #2
Строка 95, 137 - возвращаешь ссылку на уничтоженный объект.

И вообще, если выкладываешь не компилируемый код, приводи и сообщения об ошибках. Собирать проект, чтобы увидеть некомпилируемость кода как-то не заводит вообще.

Добавлено через 41 секунду
В операторы лучше константную ссылку передавай.

Добавлено через 1 минуту
И вообще, ты не создаёшь матрицу никакую. Указатель из строки 10 не используется.
Yandex
Объявления
17.04.2011, 10:07     Subscript requires array or pointer type
Ответ Создать тему
Опции темы

Текущее время: 14:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru