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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.90
azaron
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 14
#1

Subscript requires array or pointer type - C++

17.04.2011, 02:51. Просмотров 2464. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2011, 02:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Subscript requires array or pointer type (C++):

Error C2109: subscript requires array or pointer type - C++
Доброго времени суток! Подскажите, пожалуйста, что нужно изменить, чтобы пропала ошибка error C2109: subscript requires array or pointer...

Работа с функциями и ошибка "Subscript requires array or pointer type" - C++
Ребят, такая проблема. вот код #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cmath&gt; using namespace std; int...

Error C2109: subscript requires array or pointer - C++
В функциях Poisk и Show компилятор пишет, что индекс i в элементе массива x должен иметь указатель на тип объекта. Не могу понять,...

Invalid types 'float[int]' for array subscript - C++
Выдает ошибку invalid types 'float' for array subscript в 44 и 48 строке. Не пойму что не так. Подскажите пожалуйста #include...

Invalid types `float[int]' for array subscript - C++
вот такой код, вроде всё написал правильно, но компилятор ругается на 19 строку, мол &quot;Invalid types `float' for array subscript&quot;. В чём...

Ошибка: subscripted value is neither array nor pointer - C++
ввожу: scanf(&quot;%d&quot; &amp; min); даёт ошибку: subscripted value is neither array nor pointer .

1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
17.04.2011, 10:07 #2
Строка 95, 137 - возвращаешь ссылку на уничтоженный объект.

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

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

Добавлено через 1 минуту
И вообще, ты не создаёшь матрицу никакую. Указатель из строки 10 не используется.
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2011, 10:07
Привет! Вот еще темы с ответами:

invalid types ‘Room [26][26][26][double]’ for array subscript. Помогите разобраться пожалуйста. - C++
Параметр ловушки не выводиться(Trap) Выбивает ошибку invalid types ‘Room ’ for array subscript #include &lt;stdio.h&gt; #include...

Ошибка: expression must have pointer-to-object type - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;math.h&quot; using namespace std; int _tmain(int argc, _TCHAR* argv) { int size,...

Ошибка error: invalid types 'int[int]' for array subscript - C++
Дана строка,содержащая английский текст.Найти количество слов,начинающихся с буквы b. Выдает ошибку в 29 строке:error: invalid types...

Работа с массивом - Invalid types 'int[int]' for array subscript - C++
Добрый день. Данный код выдает ошибку invalid types 'int' for array subscript в функции в строке cout &lt;&lt;dm; Не понимаю в чем ошибка....


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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