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

Предупреждения компилятора об использовании неинициализированных переменных - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
18.10.2012, 19:11     Предупреждения компилятора об использовании неинициализированных переменных #1
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
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#define n 5
#define m 5
#define p 5
#define q 5
const int N = 20;
 
int sum(int s, int u);
 
int main(void)
{
int l, r, d;
 
sum(l, r);
d=l+r;
printf("\n\t Summa ravna: \"%d\n", d);
printf("\n Press any key: ");
_getch();
return 0; 
}
 
int sum(int o, int h)
{
int i, j, X[m][n], Y[p][q];
time_t t;
 
srand((unsigned)time(&t));
for (i = 0; i < m; ++i)
        for (j = 0; j < n; ++j)
            X[i][j] = (rand() % N) - N;
 
for (i = 0; i < p; ++i)
        for (j = 0; j < q; ++j)
            Y[i][j] = (rand() % N) - N;
 
for (i = 0; i < m; ++i)
        for (j = 0; j < n; ++j)
            if (X[i][j]<0) o=o+X[i][j];
 
for (i = 0; i < p; ++i)
        for (j = 0; j < q; ++j)
            if (Y[i][j]<0) h=h+Y[i][j];
return o, h;
 
}
Всем привет. При построении выдает:
1.cpp(17) : warning C4700: использована неинициализированная локальная переменная "h"
1.cpp(17) : warning C4700: использована неинициализированная локальная переменная "o"
Не пойму как их инициализировать..
Прошу помощи, если можно с объяснением моей ошибки)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2012, 19:11     Предупреждения компилятора об использовании неинициализированных переменных
Посмотрите здесь:

C++ Убрать предупреждения на break в операторе switch(...)
C++ Проблемы компилятора с++
C++ ошибка повторения имен переменных при использовании глобальной переменной
C++ Предупреждения
C++ Почему возникают предупреждения?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
18.10.2012, 19:17     Предупреждения компилятора об использовании неинициализированных переменных #2
Цитата Сообщение от AzgardC Посмотреть сообщение
return o, h;
во первых строках письма как это ты решил вернуть две переменных в один int
Цитата Сообщение от AzgardC Посмотреть сообщение
int sum(int o, int h)
во вторых чего ты пытался сделать в своей функции ужель ты пытаешься вернуть из неё те же параметры которые отдавал в функцию
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
18.10.2012, 19:35  [ТС]     Предупреждения компилятора об использовании неинициализированных переменных #3
То есть мне использовать два return??
А что мне надо тогда возращать чтобы передать значения o и h в main?
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
18.10.2012, 19:43     Предупреждения компилятора об использовании неинициализированных переменных #4
Цитата Сообщение от AzgardC Посмотреть сообщение
То есть мне использовать два return??
А что мне надо тогда возращать чтобы передать значения o и h в main?
два return использовать нельзя. Возвращяй o, а на h передавай ссылку, или наоборот.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
18.10.2012, 19:54     Предупреждения компилятора об использовании неинициализированных переменных #5
Цитата Сообщение от AzgardC Посмотреть сообщение
То есть мне использовать два return??
классный вывод
return означает дословно возврат(возвращаться)
как думаешь можно два раза вернутся из функции

Добавлено через 2 минуты
Цитата Сообщение от SeregaC++ Посмотреть сообщение
Возвращяй o, а на h передавай ссылку, или наоборот.
а зачем
вот его код
Цитата Сообщение от AzgardC Посмотреть сообщение
int sum(int o, int h)
...........................
Цитата Сообщение от AzgardC Посмотреть сообщение
return o, h;
т.е что послали то и вернули
я даже не могу понять что он своей функцией пытался выразить
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
18.10.2012, 20:03  [ТС]     Предупреждения компилятора об использовании неинициализированных переменных #6
Цитата Сообщение от ValeryS Посмотреть сообщение
я даже не могу понять что он своей функцией пытался выразить
Дело такое=): в sum нахожу сумму отрицательных элементов матрицы, в main распечатываю результат или складываю и распечатываю))

Добавлено через 1 минуту
то есть return не нужен?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2012, 20:15     Предупреждения компилятора об использовании неинициализированных переменных #7
Цитата Сообщение от AzgardC Посмотреть сообщение
Не пойму как их инициализировать..
Хотя бы так:
C++
1
int l = 0, r = 0, d = 0;
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
18.10.2012, 20:21  [ТС]     Предупреждения компилятора об использовании неинициализированных переменных #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Хотя бы так:
C++
1
int l = 0, r = 0, d = 0;
А разве когда я обращаюсь к sum, переменным l и r не присваиваются значения o и h?
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
18.10.2012, 20:23     Предупреждения компилятора об использовании неинициализированных переменных #9
Цитата Сообщение от AzgardC Посмотреть сообщение
Дело такое=): в sum нахожу сумму отрицательных элементов матрицы,
где ты их находишь?
Цитата Сообщение от AzgardC Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
srand((unsigned)time(&t));
for (i = 0; i < m; ++i)
 for (j = 0; j < n; ++j)
 X[i][j] = (rand() % N) - N;[url]http://www.cyberforum.ru/about-forum/thread103521.html[/url]
for (i = 0; i < p; ++i)
 for (j = 0; j < q; ++j)
 Y[i][j] = (rand() % N) - N;
for (i = 0; i < m; ++i)
 for (j = 0; j < n; ++j)
 if (X[i][j]<0) o=o+X[i][j];
for (i = 0; i < p; ++i)
 for (j = 0; j < q; ++j)
 if (Y[i][j]<0) h=h+Y[i][j];
ты все пытаешься сделать в функции и инициализировать два массива и вычислить сумму в двух массивах
зачем тебе main?
задачу опиши сначала словами, потом подумай как бы ты сделал,если бы не было компьютера и только потом кодируй но никак не наоборот
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
18.10.2012, 20:29  [ТС]     Предупреждения компилятора об использовании неинициализированных переменных #10
Создать программу, использующую подпрограмму-функцию. Функция должна возвращать сумму элементов с заданными свойствами в массивах или матрицах:
Суммы отрицательных элементов матриц X(m,n) и Y(p,q). Для матрицы.

Добавлено через 13 секунд
Вот=)

Ну я и решил все рассчитать в sum, a в main результат распечатать)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2012, 20:31     Предупреждения компилятора об использовании неинициализированных переменных #11
Цитата Сообщение от AzgardC Посмотреть сообщение
А разве когда я обращаюсь к sum, переменным l и r не присваиваются значения o и h?
И чему равны значения o и h? Всё наоборот. Создаются две локальные переменные o и h, и им присваиваются значения (которых нет) l и r.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
18.10.2012, 20:32     Предупреждения компилятора об использовании неинициализированных переменных #12
Цитата Сообщение от AzgardC Посмотреть сообщение
использующую подпрограмму-функцию.
это значит что ды должен создать функцию в которую передаешь адрес массива и она должна вернуть тебе
Цитата Сообщение от AzgardC Посмотреть сообщение
сумму элементов с заданными свойствами
и потом вызвать её два раз для первого массива и для второго, а не пихать весь код в функцию
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
18.10.2012, 21:06  [ТС]     Предупреждения компилятора об использовании неинициализированных переменных #13
Народ, помогите! Не знаю как сделать все нормально!=)

Добавлено через 11 минут
ValeryS , спасибо за пояснение, пойду думать.
П.С. Как тут удалить свое сообщение?=)
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
22.10.2012, 20:16  [ТС]     Предупреждения компилятора об использовании неинициализированных переменных #14
Всем привет! Это продолжение этой темыПредупреждения компилятора об использовании неинициализированных переменных . Я все сделал по последнему совету так:
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
[CPP]#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#define n 5
 
 
int** fun(int **first, int **second, int result, int z); 
int main(void)
{
int **X, **Y, d, **g;
    int i,j, size = n;
    time_t t;
        
    X= (int**)malloc((size*size));
    Y= (int**)malloc((size*size));
 
    for(i=0; i<size; i++)
     {
                   X[i]= (int*)malloc((size*size)); 
                   Y[i]= (int*)malloc((size*size));
     }
 
srand((unsigned)time(&t));
for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            X[i][j] = -20*rand()/RAND_MAX +10;
srand((unsigned)time(&t)); 
for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            Y[i][j] = -20*rand()/RAND_MAX +10;
g=fun(X,Y,d,size);
printf("\n\t Summa ravna: \"%d\n", &g);
printf("\n Press any key: ");
_getch();
return 0; 
}
 
int** fun(int **first, int **second, int result, int z)
{
int i, j, o=0, h=0;
 
for (i = 0; i < z; ++i)
        for (j = 0; j < z; ++j)
            if (first[i][j]<0) o=o+first[i][j];
 
for (i = 0; i < z; ++i)
        for (j = 0; j < z; ++j)
            if (second[i][j]<0) h=h+second[i][j];
result=o+h;
return result;
 
}
[/CPP]

и выдается такая ошибка:
1.cpp(51): error C2440: return: невозможно преобразовать "int" в "int **"
Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции

А задача звучит так:
Создать программу, использующую подпрограмму-функцию. Функция должна возвращать сумму элементов с заданными свойствами в массивах или матрицах:
Суммы отрицательных элементов матриц X(m,n) и Y(p,q). Для матрицы.

Пожалуйста объясните в чем ошибка и как исправить!
doctor_lecter
 Аватар для doctor_lecter
279 / 152 / 8
Регистрация: 22.09.2012
Сообщений: 283
22.10.2012, 20:23     Предупреждения компилятора об использовании неинициализированных переменных #15
Изменить тип возвращаемого значения функции fun с int** на int
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
22.10.2012, 20:31  [ТС]     Предупреждения компилятора об использовании неинициализированных переменных #16
Цитата Сообщение от doctor_lecter Посмотреть сообщение
Изменить тип возвращаемого значения функции fun с int** на int
Теперь получилось вот что: Run-Time Check Failure #3 - The variable 'd' is being used without being initialized.
doctor_lecter
 Аватар для doctor_lecter
279 / 152 / 8
Регистрация: 22.09.2012
Сообщений: 283
22.10.2012, 20:35     Предупреждения компилятора об использовании неинициализированных переменных #17
Вы используете d без инициализации. И вообще d и в функции fun result не нужен.
Убрать d и result, в fun вместо
C
1
2
result=o+h;
return result;
C
1
return o+h;
И еще в 32 строчке & не нужен.
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
22.10.2012, 20:51  [ТС]     Предупреждения компилятора об использовании неинициализированных переменных #18
Спасибо большое! Все работает!
P.S. Как закрыть тему?)

Добавлено через 3 минуты
Ааа, стоп, а как вернуть из функции несколько значений?

Добавлено через 5 минут
Мне просто надо вернуть поочереди o и h
doctor_lecter
 Аватар для doctor_lecter
279 / 152 / 8
Регистрация: 22.09.2012
Сообщений: 283
22.10.2012, 21:04     Предупреждения компилятора об использовании неинициализированных переменных #19
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int fun(int **first, int **second, int z, int* o, int* h)
{
int i, j;
*o = 0;
*h = 0;
for (i = 0; i < z; ++i)
        for (j = 0; j < z; ++j)
            if (first[i][j]<0) *o += first[i][j];
 
for (i = 0; i < z; ++i)
        for (j = 0; j < z; ++j)
            if (second[i][j]<0) *h += second[i][j];
return *o + *h;
}
И вызывать:
C++
1
2
int o, h;
g = fun(X, Y, size, &o, &h);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2012, 21:14     Предупреждения компилятора об использовании неинициализированных переменных
Еще ссылки по теме:

C++ Предупреждения Possible use of '...' before definition
Как избавиться от предупреждения? C++
C++ Даны 5 переменных a,b,c,d,e - необходимо каждой из этих переменных присвоить число из текстового документа

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

Или воспользуйтесь поиском по форуму:
AzgardC
7 / 7 / 0
Регистрация: 18.10.2012
Сообщений: 81
22.10.2012, 21:14  [ТС]     Предупреждения компилятора об использовании неинициализированных переменных #20
Спасибо, я сделал то же самое только сделал return 0;
Еще раз спасибо!
Yandex
Объявления
22.10.2012, 21:14     Предупреждения компилятора об использовании неинициализированных переменных
Ответ Создать тему
Опции темы

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