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

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

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

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

17.09.2012, 23:19. Просмотров 579. Ответов 16
Метки нет (Все метки)

Учусь по книге Г.Шилдта - С++ базовый курс , 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 минут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2012, 23:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при работе с глобальными переменными (C++):

О работе с переменными типа char - C++
Привет всем! Подскажите кто-нибудь. Как в C++ элементу массива или переменной присвоить символ '\' char ForConditions = '\'; ...

Не является внутренней или внешней командой - ошибка не при компиляции а при работе программы - C++
В VS скомпилировал код #include &lt;iostream&gt; using namespace std; int main() { int a; cout&lt;&lt;&quot;Hallo&quot;; cin&gt;&gt;a; cout&lt;&lt;a; ...

Ошибка при работе с массивом - C++
Добрый вечер всем. Пишу простую программу мат операций с массивами. И вот выдает такое окно с ошибкой. Помогите пожалуйста я не понимаю...

Ошибка при работе программы - C++
Здравствуйте! У меня такая проблема, вылетает программа. Она работает, компилируется, данные вводятся, но когда я перехожу к выводу перечня...

Ошибка при работе со структурами - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; typedef struct slist_ { long val; struct slist_ *next; ...

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

16
DiffEreD
1431 / 768 / 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 << '.';
}
1
Tiseez
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 19
17.09.2012, 23:33  [ТС] #3
Цитата Сообщение от yuron_477 Посмотреть сообщение
Вместо count надо ставить ::count
Безумно благодарен... т.е теперь всегда при вызове глобальной переменной нужно ставить два двоеточия? НО ПОЧЕМУ в книге этого не написано!?!?!? Тысячи книг уже пересмотрел, оп отзывам выбрал Г.Шилдта, и опять какой-то бред...

Добавлено через 4 минуты
И почему кстати у некоторых нет ошибок?...
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
17.09.2012, 23:53 #4
yuron_477, а почему вместо count надо писать ::count? Я всегда просто обращался к глобальной переменной и без двоеточий.
0
DU
1483 / 1129 / 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 как-то по другому назвать. что будет?
0
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? Я всегда просто обращался к глобальной переменной и без двоеточий.
Если честно, как бы глупо это все не выглядело, меня очень мучает этот вопрос, почему у многих так-то ,а у меня так-то * , ведь я новичек в ООП...
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.09.2012, 00:00 #7
ну я думал что и так понятно, что раз убрано using namespace std, то в остальных метах нужно явно проставить std;
std::cout << и т.п.

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


вот отсюда скопируйте код к себе и попробуйте скомпилять:
http://liveworkspace.org/code/76a41cf966635ca21d8d9b427b844def
0
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/a8bf5189ab2f711dfaca5816a192cbd6
Извини, но я действительо в форме чайника еще сижу во всем этом ^^

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

Ошибка при работе с очередью - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; struct link{ int data; link* next; };

Ошибка при работе с ifstream - C++
есть вот такой код и я точно знаю что у меня проблема вот тут: std::ifstream i1(&quot;s1&quot;), i2(&quot;s2&quot;); помогите исправить. #include &lt;conio.h&gt; ...

Ошибка при работе со структурой - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #pragma argsused float v; struct GOODS { unsigned quantity; float price;}; ...

Ошибка при работе со структурами - C++
Вот код. Выдает вот такую вот ошибку &quot;Необработанное исключение по адресу 0x012A58A1 в ConsoleApplication1.exe: 0xC0000005: нарушение...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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