Почему я не могу присвоить значение переменной в пространстве имен? - PullRequest
1 голос
/ 11 сентября 2011

Мой код, как показано ниже, когда я его компилирую, я получаю эту ошибку:

two.cpp: 5: ошибка: ожидаемый конструктор, деструктор или преобразование типов перед '= 'токен

#include <iostream>
using namespace std;
namespace a1{
    int a=3;
    a=4;
}

int main(){
    cout << a1::a<<endl;
}

Я столкнулся с этой проблемой, когда определил пространство имен в двух файлах, во втором файле я не могу присвоить значение переменной, определенной в первом файле.

Я начинаю изучать ANSI C ++ и не могу найти информацию об этом в книге.

Ответы [ 3 ]

5 голосов
/ 11 сентября 2011

Вы можете иметь объявления (которые включают в себя то, что у вас могут быть определения) в области имен, например,

int a = 3;

Но вы не можете иметь операторы без объявлений в области имен.

ДляНапример, присвоение, такое как

a = 4;

, не является объявлением: оно просто запрашивает эффект.

Однако вы можете поместить это в тело функции, например, в main.

Приветствия & hth.,

4 голосов
/ 11 сентября 2011

Цель пространств имен - избежать конфликтующих имен.Поэтому окружите объявления переменных и классов пространствами имен.Но сами по себе пространства имен не обеспечивают леса для запуска кода.Что происходит с вашим а = 4;заявление ?Где это должно выполняться?Вы должны поместить его в функцию или метод, а не в пространство имен.

0 голосов
/ 11 сентября 2011

Знает ли ваш второй файл определение int a; ? Пространства имен магически не работают, как в некоторых других языках, вы все равно должны включить заголовочный файл, содержащий определение вашего int a в другом файле, или в списке определить его как внешний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...