Проблема пространства имен в C ++ - PullRequest
5 голосов
/ 25 января 2012

У меня есть два файла Sample.cpp и Main_file.cpp.Sample.cpp имеет только одно пространство имен n1, которое содержит определение int переменная x.Я хочу напечатать эту переменную x в моем main_file.cpp.Как мне это сделать?

//Sample.cpp_BEGINS

namespace n1
{
    int x=10;
}
//Sample.cpp_ENDS

//Main_FILE_BEGINS

void main()
{
    print x;
}
//MAIN_FILE_ENDS

Спасибо за любую помощь, которую вы можете предоставить.

Ответы [ 4 ]

6 голосов
/ 25 января 2012

Вы используете полное имя переменной:

int main()
{   
     n1::x = 10;

     return 0;
}
5 голосов
/ 25 января 2012

Чтобы сделать n1::x доступным из main.cpp, вы, вероятно, захотите создать и включить sample.h:

// sample.h
#ifndef SAMPLE_H
#define SAMPLE_H

namespace n1
{
    extern int x;
}
#endif

// sample.cpp
#include "sample.h"

namespace n1
{
    int x = 42;
}

#include <iostream>
#include "sample.h"

int main()
{   
     std::cout << "n1::x is " << n1::x;
}

Если вы предпочитаетечтобы не создавать заголовочный файл, вы также можете сделать это в вашем main.cpp:

#include <iostream>

namespace n1
{
    extern int x;
}    

int main()
{   
     std::cout << "n1::x is " << n1::x;
}
4 голосов
/ 25 января 2012

добавьте строку using namespace n1 в main или вы также можете сделать как предложено @als.

3 голосов
/ 25 января 2012

Из вашего комментария кажется, что вам нужны только 2 .cpp файлы.В этом случае, следующий будет делать работу:

//Sample.cpp_BEGINS
namespace n1
{
  int x=10;
}
//Sample.cpp_ENDS

//Main_FILE_BEGINS
namespace n1
{
  extern int x;   // <---- mention that `x` is defined in other .cpp file
}
void main()
{
  print n1::x;  // to avoid 'n1::', mention 'using namespace n1;` above
}
//MAIN_FILE_ENDS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...