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

warning: ‘lectors’ is used uninitialized in this function - C++

Восстановить пароль Регистрация
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
08.02.2014, 20:53     warning: ‘lectors’ is used uninitialized in this function #1
Здравствуйте.
Делаю вот костяк программы.
Пока компилируется без ошибок, но с предупреждениями, относительно четырех указателей (как в названии темы)

Вырезки с кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include "init.hpp"
 
int main()
{
   Lector* lectors;
   Auditr* auditrs;
   Discpl* discpls;
   Group* groups;
 
   init(lectors, auditrs, discpls, groups);
   return 0;
}
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
#include "init.hpp"
 
void init(Lector* lctrs, Auditr* audtrs, Discpl* discpls, Group* groups)
{
   cout << "\nLets add some data\n";
 
   cout << "How many lectors you want to add?\n > ";
   int lectors_to_add = 0;
   cin >> lectors_to_add;
   lctrs = add_lectors(&lectors_to_add);
 
   cout << "\nHow many auditories you want to add?\n > ";
   int auditrs_to_add;
   cin >> auditrs_to_add;
   audtrs = add_auditrs(&auditrs_to_add, &lectors_to_add, lctrs);
 
   cout << "\nHow many disciplines you want to add?\n > ";
   int discpls_to_add;
   cin >> discpls_to_add;
   discpls = add_discpls(&discpls_to_add);
 
   cout << "\nHow many groups you want to add?\n > ";
   int groups_to_add;
   cin >> groups_to_add;
   groups = add_groups(&groups_to_add);
}
 
Lector* add_lectors(int* ptr_lectors_to_add)
{
   Lector* lctrs = new Lector[*ptr_lectors_to_add]; //inner variable
   for (int i = 0; i < *ptr_lectors_to_add; ++i)
      lctrs[i].fill_up();
 
   return lctrs;
}
 
// ... и далее подобные функции
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include "types.hpp"
 
Lector* add_lectors(int*);
Auditr* add_auditrs(int*, int*, Lector*);
Discpl* add_discpls(int*);
Group* add_groups(int*);
 
void init(Lector*, Auditr*, Discpl*, Group*);
Что к чему? Как сделать их (массивы в main) инициализированными? Подозреваю, что пока то вообще не массивы, а просто указатели. Как же сделать их динамически расширяющимися, чтобы не использовать vector?


И второй вопрос:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Есть метод:
void Auditr::set_owner(int* ptr_lectors_to_add, Lector* lctrs)
{
   cout << "Who own this auditory? (enter an digit as answer)\n> ";
   for (int j = 0; j < *ptr_lectors_to_add; ++j)
   {
      cout << j + 1 << ". ";
      lctrs[j].show_name();
      cout << '\n';
   }
   int answer = 0;
   cin >> answer;
   owner = lctrs[answer - 1];
}
Почему здесь не говорится, что я пока не перегрузил оператор =, чтобы последняя инструкция выполнялась (там мой класс)?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2014, 20:53     warning: ‘lectors’ is used uninitialized in this function
Посмотрите здесь:

C++ C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be declared friend
C++ warning
Warning C4996: 'strcpy': This function or variable may be unsafe C++
C++ warning strtok
Warning ... is assigned a value that is never used C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.02.2014, 21:41     warning: ‘lectors’ is used uninitialized in this function #2
andrejap, вы неправильно работаете с указателями. Либо нужно создать объект и в функцию передавать указатель на него, либо, если создаете объект внутри функции - передавать указатель по ссылке. Иначе вы работаете с локальной копией указателя. Почитайте про формальные и фактические аргументы функции.

Добавлено через 1 минуту
Цитата Сообщение от andrejap Посмотреть сообщение
Почему здесь не говорится, что я пока не перегрузил оператор =
система предоставляет оператор присваивания по умолчанию, который делает почленное копирование.
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
08.02.2014, 21:47  [ТС]     warning: ‘lectors’ is used uninitialized in this function #3
Tulosba, пока толком не ознакамливался с передачей аргументов. А так:
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
   Lector* lectors;
   Auditr* auditrs;
   Discpl* discpls;
   Group* groups;
 
   init(&lectors, &auditrs, &discpls, &groups);
   return 0;
}
и прототип:
C++
1
void init(Lector**, Auditr**, Discpl**, Group**);
?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.02.2014, 21:56     warning: ‘lectors’ is used uninitialized in this function #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от andrejap Посмотреть сообщение
пока толком не ознакамливался с передачей аргументов
документацию по русской народной привычке оставляем на потом?
Цитата Сообщение от andrejap Посмотреть сообщение
А так
Так уже похоже на правду. Но я бы разделил init на 4 разные части и возможно даже вынес бы в конструкторы соответствующих классов.
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
08.02.2014, 22:02  [ТС]     warning: ‘lectors’ is used uninitialized in this function #5
Цитата Сообщение от Tulosba Посмотреть сообщение
документацию по русской народной привычке оставляем на потом?
Язык пока учу по учебникам. Еще не дошел.

Спасибо большое за разъяснения!
Yandex
Объявления
08.02.2014, 22:02     warning: ‘lectors’ is used uninitialized in this function
Ответ Создать тему
Опции темы

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