Невозможно определить глобальную переменную в С++
Я новичок в программировании и с удовольствием пробираюсь через C++ Руководство для начинающих (которое мне очень нравится!). Тем не менее, я столкнулся с небольшой проблемой. В главе 5 Шильдт рассказывает о глобальных переменных и представляет эту небольшую программу, чтобы показать, как их можно использовать:
#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();
}
cin.get();
return 0;
}
void func1()
{
cout << "count: " << count; // Access global count
cout << "\n";
func2();
}
void func2(){
int count;
for (count = 0; count < 3; count++)
cout << ".";
}
Когда я компилирую код, мне выдается сообщение об ошибке всякий раз, когда переменная count используется в основном блоке и других функциях программы. Это проблема с компилятором (Visual Studio Express 2013? Нужно ли префикс глобальной переменной с чем-то, чтобы ее можно было использовать?
Ответы
Ответ 1
count
определяется как в вашем коде, так и в стандартной библиотеке (в пространстве имен std). Ваше использование using namespace std;
для перетаскивания всего пространства имен Standard в глобальное пространство имен создает двусмысленность. Вы должны выполнить хотя бы одно из следующих действий:
- удалить
using namespace
std из глобального пространства имен; либо использовать пространство имен в своих функциях, либо использовать только имена, которые вам нужны, или квалифицировать все стандартные имена при их использовании
тщательно выберите свои имена, чтобы избежать конфликтов со стандартными именами
- измените имя
count
на * что-то еще, чтобы избежать двусмысленности.
- укажите ссылки на глобальный
count
, нарисуя ::count
.
*) Обратите внимание, что стандартная библиотека также определяет имя distance
.
Ответ 2
Я предполагаю, что это близко к ошибке, которую вы получаете:
In function 'int main()':
Line 13: error: reference to 'count' is ambiguous
compilation terminated due to -Wfatal-errors.
Использование пространства имен std
заставляет count
обращаться к std::count
, который является алгоритмом в стандартной библиотеке.
http://www.cplusplus.com/reference/algorithm/count/