Неверное использование квалифицированного имени

Я пытаюсь следующее:

#include <iostream>

namespace A
{
extern int j;
}

int main()
{
int A::j=5;
std::cout << A::j;
}

Но я error: invalid use of qualified-name ‘A::j’, Пожалуйста, объясните, почему произошла эта ошибка?

4

Решение

Пожалуйста, объясните, почему произошла эта ошибка?

Язык просто не позволяет вам определять переменные пространства имен внутри функций. Определение должно быть либо в namespace A:

namespace A {
int j = 5;
}

или в окружающем (глобальном) пространстве имен:

int A::j = 5;

Конечно, вы можете присвоить значение переменной внутри функции:

int main() {
A::j = 5;
// ...
}

но вам также понадобится где-то определение, поскольку в вашей программе его нет.

4

Другие решения

#include <iostream>

namespace A
{
int j;
}

int main()
{
A::j=5;
std::cout << A::j;
return 0;
}

Поскольку вы объявляете j в пространстве имен A как extern в глобальной области, вам также необходимо его определение. Но в основном вы пытаетесь присвоить ему, что также требует определения символа при связывании. Таким образом, вы можете удалить extern в пространстве имен A и удалить ключевое слово int при назначении.

2

По вопросам рекламы [email protected]