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

Ошибка при работе с глобальными переменными - C++

Восстановить пароль Регистрация
 
Tiseez
 Аватар для Tiseez
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 19
17.09.2012, 23:19     Ошибка при работе с глобальными переменными #1
Учусь по книге Г.Шилдта - С++ базовый курс , 3е издание.

Прохожу тему глобальных переменных, вот код-
C++ (Qt)
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
#include <iostream>
using namespace std;
 
void func1();
void func2();
 
int count; //Это глобальная переменная.
 
int main()
{
    int i; //Это локальная переменная.
    for (i=0; i<10;i++) {
        count = i * 2;
        func1();
        }
        system("pause");
        return 0;
}
 
void func1()
{
     cout << "count: " << count; //Обращение к глобальной переменной.
     cout << '\n';   //Вывод символа новой строки.
     func2();
}
 
void func2()
{
     int count; //Это локальная переменная.
     
     for(count=0;count<3;count++) cout << '.';
}
Добавлено через 10 минут
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2012, 23:19     Ошибка при работе с глобальными переменными
Посмотрите здесь:

C++ Ошибка при работе с массивом
Ошибка при работе с мютексом C++
C++ Ошибка при работе со структурой
Ошибка при работе со строками C++
О работе с переменными типа char C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
17.09.2012, 23:22     Ошибка при работе с глобальными переменными #2
Вместо count надо ставить ::count
код
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
void func1();
void func2();
 
int count; //Это глобальная переменная.
 
int main()
{
    int i; //Это локальная переменная.
    for (i=0; i<10;i++) {
        ::count = i * 2;
        func1();
    }
 
    system("pause");
    return 0;
}
 
void func1()
{
    cout << "count: " << ::count; //Обращение к глобальной переменной.
    cout << '\n';   //Вывод символа новой строки.
    func2();
}
 
void func2()
{
    int count; //Это локальная переменная.
 
    for(count=0;count<3;count++) cout << '.';
}
Tiseez
 Аватар для Tiseez
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 19
17.09.2012, 23:33  [ТС]     Ошибка при работе с глобальными переменными #3
Цитата Сообщение от yuron_477 Посмотреть сообщение
Вместо count надо ставить ::count
Безумно благодарен... т.е теперь всегда при вызове глобальной переменной нужно ставить два двоеточия? НО ПОЧЕМУ в книге этого не написано!?!?!? Тысячи книг уже пересмотрел, оп отзывам выбрал Г.Шилдта, и опять какой-то бред...

Добавлено через 4 минуты
И почему кстати у некоторых нет ошибок?...
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
17.09.2012, 23:53     Ошибка при работе с глобальными переменными #4
yuron_477, а почему вместо count надо писать ::count? Я всегда просто обращался к глобальной переменной и без двоеточий.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
17.09.2012, 23:54     Ошибка при работе с глобальными переменными #5
что-то непонятное описание ошибки какое-то.
студия кстати нормально компилит до тех пор, пока не влючен #include <algorithm>.
в этом случае появляется неоднозначность из-за того, что
становится видно имя алгоритма std::count, которое видно из-за директивы using namespace std;
может быть у вас такая-же ситуация и компилятор так непонятно сообщает об ошибке неоднозначности.
std::count каким-то образом пролез из файла iostream.
попробуйте убрать using namespace std или глобальную переменную count как-то по другому назвать. что будет?
Tiseez
 Аватар для Tiseez
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 19
17.09.2012, 23:59  [ТС]     Ошибка при работе с глобальными переменными #6
Цитата Сообщение от DU Посмотреть сообщение
что-то непонятное описание ошибки какое-то.
студия кстати нормально компилит до тех пор, пока не влючен #include <algorithm>.
в этом случае появляется неоднозначность из-за того, что
становится видно имя алгоритма std::count, которое видно из-за директивы using namespace std;
может быть у вас такая-же ситуация и компилятор так непонятно сообщает об ошибке неоднозначности.
std::count каким-то образом пролез из файла iostream.
попробуйте убрать using namespace std или глобальную переменную count как-то по другому назвать. что будет?
[404] - вот что!

Добавлено через 43 секунды
Цитата Сообщение от Dani Посмотреть сообщение
yuron_477, а почему вместо count надо писать ::count? Я всегда просто обращался к глобальной переменной и без двоеточий.
Если честно, как бы глупо это все не выглядело, меня очень мучает этот вопрос, почему у многих так-то ,а у меня так-то * , ведь я новичек в ООП...
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.09.2012, 00:00     Ошибка при работе с глобальными переменными #7
ну я думал что и так понятно, что раз убрано using namespace std, то в остальных метах нужно явно проставить std;
std::cout << и т.п.

хз почему не работает. вот типа стандартный компилятор и там все хорошо:
http://liveworkspace.org/code/a8bf51...ca5816a192cbd6


вот отсюда скопируйте код к себе и попробуйте скомпилять:
http://liveworkspace.org/code/76a41c...8d9b427b844def
Tiseez
 Аватар для Tiseez
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 19
18.09.2012, 00:02  [ТС]     Ошибка при работе с глобальными переменными #8
Цитата Сообщение от DU Посмотреть сообщение
ну я думал что и так понятно, что раз убрано using namespace std, то в остальных метах нужно явно проставить std;
std::cout << и т.п.

хз почему не работает. вот типа стандартный компилятор и там все хорошо:
http://liveworkspace.org/code/a8bf51...ca5816a192cbd6
Извини, но я действительо в форме чайника еще сижу во всем этом ^^

А ведь действительно странно..... если бы кто-нибудь ответил, почему так, я бы может и уснул спокойно сегодня...
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
18.09.2012, 00:03     Ошибка при работе с глобальными переменными #9
А это название никакое не зарезервированное? А то интересно, если эту глобальную переменную назвать по-другому, то все компилирует.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.09.2012, 00:04     Ошибка при работе с глобальными переменными #10
ну скорее всего все-таки из-за неоднозначности имен как я уже сказал. конфликт с std::count
Tiseez
 Аватар для Tiseez
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 19
18.09.2012, 00:05  [ТС]     Ошибка при работе с глобальными переменными #11
Цитата Сообщение от DU Посмотреть сообщение
вот отсюда скопируйте код к себе и попробуйте скомпилять:
http://liveworkspace.org/code/76a41c...8d9b427b844def
Работает, без using namespace std; , самое непонятное, что с этой командой написанно в столь хваленной всеми книге... а ведь она и оринтирована на чайников, которые без опыта в ООП не смогут найти САМИ ошибку, по причине возможно тупорылого перевода на русский язык.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.09.2012, 00:08     Ошибка при работе с глобальными переменными #12
using namespace std; - полезная директива.
просто ошибка довольно хитрая. я вот не ожидал, что в какой-то реализации стандартной библиотеке алгоритм std::count может быть внесен в область видимости через #include <iostream>
+ совпадение этого имени с именем глобальной переменной + непонятное описание ошибки компилятора. студия например и тот компиллер, который в ссылках вполне себе понятно ошибку пишет. при наличии небольшого опыта все понятно без чтения всяких манн.
Tiseez
 Аватар для Tiseez
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 19
18.09.2012, 00:11  [ТС]     Ошибка при работе с глобальными переменными #13
Цитата Сообщение от DU Посмотреть сообщение
using namespace std; - полезная директива.
просто ошибка довольно хитрая. я вот не ожидал, что в какой-то реализации стандартной библиотеке алгоритм std::count может быть внесен в область видимости через #include <iostream>
+ совпадение этого имени с именем глобальной переменной + непонятное описание ошибки компилятора. студия например и тот компиллер, который в ссылках вполне себе понятно ошибку пишет. при наличии небольшого опыта все понятно без чтения всяких манн.
[404] вот что пишет Borland например...
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.09.2012, 00:13     Ошибка при работе с глобальными переменными #14
что это за скрин? если ошибка, то где текст ошибки? или как это понимать?
Tiseez
 Аватар для Tiseez
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 19
18.09.2012, 00:15  [ТС]     Ошибка при работе с глобальными переменными #15
Цитата Сообщение от DU Посмотреть сообщение
что это за скрин? если ошибка, то где текст ошибки? или как это понимать?
Извини, fixed.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.09.2012, 00:20     Ошибка при работе с глобальными переменными #16
ну вот как раз там и набисано Ambiguity (неоднозначность) между глобальной переменной count и функцией std::count.
что нужно понимать как то, что компилятор не может понять, как понимать имя count в коде. это может быть как глобальная переменная, так и функция std::count. это есть ошибка, о чем он и пишет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2012, 00:26     Ошибка при работе с глобальными переменными
Еще ссылки по теме:

Ошибка при работе с классами C++
C++ ошибка при работе со стуктурами
Ошибка при работе с очередью C++

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

Или воспользуйтесь поиском по форуму:
Tiseez
 Аватар для Tiseez
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 19
18.09.2012, 00:26  [ТС]     Ошибка при работе с глобальными переменными #17
Цитата Сообщение от DU Посмотреть сообщение
ну вот как раз там и набисано Ambiguity (неоднозначность) между глобальной переменной count и функцией std::count.
что нужно понимать как то, что компилятор не может понять, как понимать имя count в коде. это может быть как глобальная переменная, так и функция std::count. это есть ошибка, о чем он и пишет.
Теперь все ясно, большущее спасибо всем =)
Yandex
Объявления
18.09.2012, 00:26     Ошибка при работе с глобальными переменными
Ответ Создать тему
Опции темы

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