Я пытаюсь следующее:
#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’
, Пожалуйста, объясните, почему произошла эта ошибка?
Пожалуйста, объясните, почему произошла эта ошибка?
Язык просто не позволяет вам определять переменные пространства имен внутри функций. Определение должно быть либо в namespace A
:
namespace A {
int j = 5;
}
или в окружающем (глобальном) пространстве имен:
int A::j = 5;
Конечно, вы можете присвоить значение переменной внутри функции:
int main() {
A::j = 5;
// ...
}
но вам также понадобится где-то определение, поскольку в вашей программе его нет.
#include <iostream>
namespace A
{
int j;
}
int main()
{
A::j=5;
std::cout << A::j;
return 0;
}
Поскольку вы объявляете j в пространстве имен A как extern в глобальной области, вам также необходимо его определение. Но в основном вы пытаетесь присвоить ему, что также требует определения символа при связывании. Таким образом, вы можете удалить extern в пространстве имен A и удалить ключевое слово int при назначении.