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

Ошибка в коде - C++

Восстановить пароль Регистрация
 
!Андрей!
6 / 6 / 0
Регистрация: 31.01.2012
Сообщений: 134
29.08.2012, 12:16     Ошибка в коде #1
Подскажите что не так?

Пишет ошибку в файле graf.cpp:
106 H:\lab2graf2\graf.cpp invalid types `double[int]' for array subscript
108 H:\lab2graf2\graf.cpp invalid types `double[int]' for array subscript
114 H:\lab2graf2\graf.cpp invalid types `double[int]' for array subscript

придирается к матрице. Ещё ужасно бесит warning:
3 C:\Dev-Cpp\include\c++\3.4.2\backward\list.h:59, from graf.h In file included from C:/Dev-Cpp/include/c++/3.4.2/backward/list.h:59, from graf.h
1 H:\lab2graf2\graf.h:3, from graf.cpp from graf.h:3, from graf.cpp
1 H:\lab2graf2\graf.cpp from graf.cpp
32:2 C:\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# include "graf.h"
# include <iostream.h>
using namespace std;
 
int main(int argc, char *argv[])
{
//  memset(M, 0, size*size*sizeof(int));
    graf g;
    g.readFile();
    
    cout << "All ways:\n\n";
    g.findWay();
    system("PAUSE");
    system("call deleteTrash.bat");
    return EXIT_SUCCESS;
}
////////////////////////////////////////////////////////
graf.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# ifndef GRAF_H
# define GRAF_H
# include <list.h>
class graf
{
    public:
        int str, stlb;
        
        graf()
        {
            str = 0;
            stlb = 0;
        };
        
        ~graf(){};
        void findWay(double&);
        void readFile();
    private:
        void findWay(double&, list<int>&, int&);
};
 
# endif
graf.cpp
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
# include "graf.h"
# include <fstream>
# include <iostream>
using namespace std;
void graf::readFile()
{
    char path[] =   "text.txt";
    ifstream file(path); // input
    if(!file) 
    {
        cout << "Cannot open file.\n";
    }
    
    double d;
    int cnt = 0;
    // ïîëó÷åГ*ГЁГҐ êîëè÷åñòâГ* äðîáГ*ûõ Г·ГЁГ±ГҐГ« Гў ГґГ*éëå
    while(!file.eof())
    {
       file >> d;
       cnt++;
    }
    
    char buf[256];
    
    file.close();
    file.clear();
    file.open(path);
    
    // ïîëó÷åГ*ГЁГҐ êîëè÷åñòâГ* ñòðîê
    while(!file.eof())
    {
       file.getline(buf, 255);
       str++;
    }
    
    file.close();
    file.clear();
    
    // ïîëó÷åГ*ГЁГҐ êîëè÷åñòâГ* ñòîëáöîâ
    stlb = cnt/str;
    
//        Г±Г®Г§Г¤Г*Г*ГЁГҐ Г¬Г*òðèöû
//        Matrix = ( double ** )malloc( str * sizeof( double *));
//        for(int i = 0; i < stlb; i++)
//            Matrix[i] = (double*)malloc( stlb * sizeof(double));
    double Matrix[str][stlb];
    
    cout << "Matrix size [" << str << "][" << stlb << "]!\n";
    file.open(path);
    // Г·ГІГҐГ*ГЁГҐ Г¬Г*òðèöû
    
    for(int i = 0; i < str; i++)
    {
       for(int j = 0; j < stlb; j++)
       {
           file >> Matrix[i][j];
           cout << Matrix[i][j] << " ";
       }
       cout << endl;
    }
}
//////////////////////////////////////////////////////
 
void graf::findWay(double& Matrix)
{
    list<int> way;
    int lenght = 0;
 
    for(int i = 0; i < str; i++)
    {
         way.push_back(i);
         findWay(Matrix, way, lenght);
         way.pop_back();
    }
}
//////////////////////////////////////////////////////
void graf::findWay(double& Matrix, list<int>& way, int& lenght)
{
    if (way.size() == stlb)
    {
        cout << "way: " ;
        for (list<int>::iterator it = way.begin(); it != way.end(); it++)
        {
            cout << ((*it) + 1) << ' ';
        }
        cout << "\t lenght: " << lenght << "\n";
    } 
 
    bool flag = false;
    for(int i = 0; i < str; i++)
    {
        flag = false;      
        for (list<int>::iterator it = way.begin(); it != way.end(); it++)
        {
            if ((*it) == i)
            {
                  flag = true;
                  break;
            }
        }
        
        if (!flag)
        {
            int cur = way.back();
                        
            if (Matrix[cur][i] > 0)
            {
                 lenght += Matrix[cur][i];
                 way.push_back(i);
                 
                 findWay(Matrix, way, lenght);
                 
                 way.pop_back();
                 lenght -= Matrix[cur][i];
            }     
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2012, 12:16     Ошибка в коде
Посмотрите здесь:

ОШибка в коде. C++
Ошибка в коде C++
Ошибка в коде? C++
В чём ошибка.В коде там где коментарий там ошибка поучается. C++
C++ ошибка в коде
C++ Ошибка в коде
C++ ошибка в коде
Ошибка в коде C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
29.08.2012, 12:40     Ошибка в коде #2
В объявлении функции
C++
1
void graf::findWay(double& Matrix, list<int>& way, int& lenght)
Параметр Matrix объявлен как ссылка на double, а не как двойной массив. Дальнейшее обращение к нему как к двумерному массиву некорректно.

Добавлено через 4 минуты
Упомянутый warning говорит о том, что инклуды вида "<library.h>" устарели и надо писать "<library>" без ".h".
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
29.08.2012, 12:57     Ошибка в коде #3
В функции void graf::readFile() невозможно создать двумерный массив с не константными размерами. Попробуйте заменить на
C++
1
2
3
double **Matrix = new double *[stlb];
for (int i = 0; i<stlb; i++)
    Matrix[i] = new double[str];
Yandex
Объявления
29.08.2012, 12:57     Ошибка в коде
Ответ Создать тему
Опции темы

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