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

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

Войти
Регистрация
Восстановить пароль
 
GotoFreeMan
0 / 0 / 0
Регистрация: 09.12.2011
Сообщений: 20
#1

Ошибка при передаче в скрытый параметр класса. - C++

16.01.2012, 19:17. Просмотров 626. Ответов 11
Метки нет (Все метки)

В функции считываю из входного файла некоторые значения(x1,x2,y1,y2,alph,omeg,rad,POG,park и тп) с помощью файлового потока. Программа верно инициализирует эти переменные.
Вот эта функция, считывания входного файла:

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
void inputroad(char* inptfl,ROADS* road[], int nor)  //Функция ввода свойств дорог из файла
{
    ifstream fl(inptfl,ios::in);
    char ch;
    if (fl)
    {
        cout <<"max itarate"<<'\n'<<nor;
        for (int i=0;i<nor;i++)
        {
            cout <<"inside the loop, itrate num " << i+1 << '\n';
            fl >> ch;
            cout <<"get letter of type of road"<<ch<<'\n';
            float x1,x2,y1,y2,alph,omeg,rad,POG,park;
                    int Mins,Maxs,line;
                    char dir;
            if(ch=='l')
            {       cout <<"inside switch l"<< '\n';
                    fl >> x1;cout << x1<<'\n';
                    fl >> y1;
                    fl >> x2;
                    fl >> y2;
                    fl >> POG;
                    fl >> park;
                    fl >> Mins;
                    fl >> Maxs;
                    fl >> dir;
                    fl >> line;cout << line<<'\n';
                    road[i]->make_R (x1,y1,x2,y2,NullForCircle,NullForCircle,NullForCircle, POG,  park,Mins,Maxs, ch, dir, line);
                    cout <<"make road"<< '\n';
                    cout <<road[i]->ret_X0();cout <<road[i]->ret_Y0();cout <<road[i]->ret_X1();cout <<road[i]->ret_Y1();
            }
            else
            {
                cout <<"inside switch c"<< '\n';
                fl >>x1; fl >>y1; fl>>rad;fl>>alph;fl>>omeg; fl >> POG; fl >> park; fl >> Mins; fl >> Maxs; fl >> dir;  fl >> line;
                road[i]->make_R(x1,y1,0,0,rad,alph,omeg,POG,park,Mins,Maxs,ch,dir,line);//ошибка
            }
        };
            fl.ignore(1000,'\n');
            cout<<"go to the next string";
    }
};
Далее по ходу программы вызывается метод класса ROADS, к которому принадлежит объект road[i].
В нижеприведённый метод передаются значения, полученный во входном файле(передаются верно), но программа отказывается присваивать скрытое значение в нижеприведённом методе. Типы скрытых параметров и соответствующих значений совпадают и должны присваиваться без преобразований.

C++
1
2
3
4
5
6
7
8
9
10
11
void make_R (float x0,float y0,float x1,float y1,float rad,float alph, float omeg,float POG,
                 float park,int mins,int maxs,char rdt,char dir,int line)//Конструктор для дорог
           {
               cout<<"inside make_R"<<'\n';
               cout<< x0 <<' '<<y0<<' '<<x1<<' '<<y1<<' '<<rad<<' '<<alph<<' '<<omeg<<' '<<POG<<' '<<park<<' '<<mins<<' '<<maxs<<' '<<rdt<<' '<<dir<<' '<<line;
               X0=x0;cout<<"x0"; Y0=y0;X1=x1;Y1=y1;
               radius=rad;alpha=alph;omega=omeg;
               PointOfGrav=POG;PARK=park;
               minspeed=mins;maxspeed=maxs;
               roadtype=rdt;direction=dir;lines=line;
           };
Пожалуйста, подскажите в чём ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2012, 19:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при передаче в скрытый параметр класса. (C++):

Remove_if - при передаче функции класса выдает ошибки - C++
#include &lt;QCoreApplication&gt; #include &lt;vector&gt; using namespace std; template &lt;class T&gt; class c_equ { protected: T equ; ...

Скрытый параметр - казатель this. - C++
Всё написал так. как было написано в листинге 8.8 книги Jessie Liberty. После нажатия на кноку &quot;компилировать&quot; компилятор выдаёт ошибку. ...

При передачи указателя на обьект ошибка,а при передаче ссылки на указатель нет. Почему? - C++
Hi All! class SomeObj { public: int x; }

Ошибка при передаче в функцию - C++
Хочу передать в функцию строку и там ее заполнить, подчеркивает void karta(MyStruct s.karta,int size); И пишет: 1 IntelliSense:...

Ошибка при передаче структуры - C++
Пишу в тему для начинающих, ибо жестко туплю с данным вопросом. Есть метод: Fuse_Interpretate::clearStruct(PS)//!!!!!!!!!!!! {...

ошибка в коде при идеальной передаче - C++
Здравствуйте, есть код и ошибка в нем: template&lt;typename T&gt; struct extension { extension&lt;T&gt;&amp; get(T&amp;&amp; value) { obj =...

11
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
16.01.2012, 19:27 #2
ябыможетпрочиталэтовсерукоблудствоеслибытольконерябилотаквглазахотэтогоколичествабукв
0
GotoFreeMan
0 / 0 / 0
Регистрация: 09.12.2011
Сообщений: 20
16.01.2012, 19:32  [ТС] #3
Если трудночитаемо, то подскажите как сделать лучше - исправлю.
0
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
16.01.2012, 19:56 #4
какие ошибки выдаёт?
0
GotoFreeMan
0 / 0 / 0
Регистрация: 09.12.2011
Сообщений: 20
16.01.2012, 20:17  [ТС] #5
Сам компилятор - никаких. Программа выводит "Инструкция по адресу 0x0042161a обратилась к памяти по адресу 0x005c0032. Память не может быть written.
0
zss
Модератор
Эксперт С++
6401 / 5967 / 1944
Регистрация: 18.12.2011
Сообщений: 15,361
Завершенные тесты: 1
16.01.2012, 20:26 #6
Скорее всего, Вы присваиваете значение элементу, которому память не выделена.
Проверьте, действительно ли road[i] существуют для все значений i.
1
GotoFreeMan
0 / 0 / 0
Регистрация: 09.12.2011
Сообщений: 20
16.01.2012, 20:48  [ТС] #7
Таким образом я инициализирую массив объектов, где NumOfRoad переменная, заранее инициализированная. Вроде при NumOfRoad=3 должны сужествовать ROAD[0] ROAD[1] и ROAD[2]?
C++
1
ROADS* ROAD[NumOfRoad];
0
zss
Модератор
Эксперт С++
6401 / 5967 / 1944
Регистрация: 18.12.2011
Сообщений: 15,361
Завершенные тесты: 1
16.01.2012, 21:04 #8
В функцию inputroad(char* inptfl,ROADS* road[], int nor)
передается к-во объектов nor проверьте в отладчике,
правильный ли он.
0
GotoFreeMan
0 / 0 / 0
Регистрация: 09.12.2011
Сообщений: 20
16.01.2012, 21:16  [ТС] #9
В коде есть строка
C++
1
cout <<"max itarate"<<'\n'<<nor;
она верно выводит, что nor=3.
0
zss
Модератор
Эксперт С++
6401 / 5967 / 1944
Регистрация: 18.12.2011
Сообщений: 15,361
Завершенные тесты: 1
16.01.2012, 21:28 #10
Тогда остается одно. Ставьте в начале функции останов,
а потом по шагам дойдите до строки, где ошибка и посмотрите
значения переменных.
0
GotoFreeMan
0 / 0 / 0
Регистрация: 09.12.2011
Сообщений: 20
16.01.2012, 21:47  [ТС] #11
В коде метода практически то же самое. Ошибка происходит при присвоении скрытого параметра X0 класса.
0
zss
Модератор
Эксперт С++
6401 / 5967 / 1944
Регистрация: 18.12.2011
Сообщений: 15,361
Завершенные тесты: 1
16.01.2012, 21:48 #12
поставьте останов перед присваиванием и посмотрите адрес X0.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2012, 21:48
Привет! Вот еще темы с ответами:

Ошибка при передаче параметра в функцию - C++
В ДЗ есть пример кода, помогите пожалуйста исправить, до работающего варианта (VS2015). Ошибки: (32) error C2660: strcpy_s: функция не...

Ошибка при передаче результата функции - C++
Оператор + возвращает правильное значение (по крайней мере в конце его тела я вывожу полученный список, и все верно, он возвращает его по...

Ошибка при передаче двумерного массива в функцию - C++
Помогите пожалуйста, никак не могу разобраться. Я хочу чтобы функция createBlankGameField() ввела данные в массив gameField созданный в...

Ошибка при передаче двумерного массива в функцию - C++
cannot convert 'int (*)' to 'int**' for argument '1' to 'void func(int**, int, int)' #include&lt;iostream&gt; using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
16.01.2012, 21:48
Ответ Создать тему
Опции темы

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