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

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

#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’, Пожалуйста, объясните, почему произошла эта ошибка?

2 ответа

Решение

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

Язык просто не позволяет вам определять переменные пространства имен внутри функций. Определение должно быть либо в 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 при назначении.

Другие вопросы по тегам