Ошибка "не называет тип" при использовании пространств имен в c ++ - PullRequest
5 голосов
/ 27 мая 2020

В приведенном ниже коде запись оператора A::x=5 дает ошибку:

'x' в пространстве имен 'A' не называет тип

Может 'Разве мы не назначаем глобальное значение для x переменной?

#include <iostream>

int x = 10;  

namespace A
{
    int x = 20; 
}

A::x=5;

int main()
{
    int x = 30; 
    std::cout << "x = " << x << std::endl;
    std::cout << "A::x = " << A::x << std::endl;
    std::cout << "::x = " << ::x << std::endl;
}

1 Ответ

10 голосов
/ 27 мая 2020

Разве мы не можем назначить глобальное значение для x переменной?

Можно. Но вы должны поместить оператор присваивания в функцию. например,

int main()
{
    A::x=5;
    int x = 30; 
    std::cout << "x = " << x << std::endl;
    std::cout << "A::x = " << A::x << std::endl;
    std::cout << "::x = " << ::x << std::endl;
}

Обратите внимание, что A::x=5; - это оператор , но не определение (с инициализатором), например int x = 20;, это разные вещи.

...