2012-01-25 33 views
5

Tôi có hai tệp Sample.cpp và Main_file.cpp. Sample.cpp chỉ có một không gian tên n1 có chứa định nghĩa là int biến x. Tôi muốn in biến này x trong main_file.cpp của tôi. Làm thế nào để tôi làm việc này?Vấn đề không gian tên trong C++

//Sample.cpp_BEGINS 

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

//Main_FILE_BEGINS 

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

Cảm ơn bạn đã được trợ giúp bạn có thể cung cấp.

Trả lời

6

Bạn sử dụng tên đầy đủ của biến:

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

    return 0; 
} 
+0

khi tôi đã cố gắng mã nêu trên, tôi có 2 lỗi sau đây: 1) 'n1': không phải là một lớp hoặc namespace tên. 2) 'x': số nhận dạng không khai báo. – Jatin

+0

@ user1168582: Bạn có bao gồm tệp tiêu đề thực sự đã xác định không gian tên cho 'main.cpp' không? Trừ khi bạn bao gồm trình biên dịch sẽ không thực sự biết 'n' là gì. –

+0

Tôi không có bất kỳ tệp tiêu đề nào trong trường hợp này. Tôi đã xác định không gian tên trong tệp Sample.cpp. Và cố gắng truy cập biến số nguyên x vào phương thức main() – Jatin

4

thêm một dòng using namespace n1 trong chính hoặc bạn cũng có thể làm như @als gợi ý.

+0

Không có gì sai khi sử dụng 'khai báo sử dụng' nhưng nếu không gian tên được nhập chứa nhiều ký hiệu thì tốt hơn hết là sử dụng toàn bộ tiêu chuẩn thay vì làm ô nhiễm không gian tên hiện tại với tất cả các ký hiệu từ không gian tên đang được nhập. –

+0

@als ..bạn đang đúng ... nhưng tôi chỉ nghĩ đến việc giải quyết vấn đề của OP :) – Vijay

+0

@Als: 'using declaration' hoàn toàn khác với' using directive'. Câu trả lời này nói về cái sau và không phải là câu trước. –

5

Để làm n1::x thể truy cập từ main.cpp có thể bạn sẽ muốn tạo ra và bao gồm 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; 
} 

Nếu bạn không muốn tạo ra một tiêu đề tập tin bạn cũng có thể làm điều này trong main.cpp của bạn:

#include <iostream> 

namespace n1 
{ 
    extern int x; 
}  

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

Nhưng tôi không muốn tạo tệp Sample.h. Tôi chỉ muốn có một tệp Sample.cpp và một tệp main.cpp. – Jatin

+0

@ user1168582 bạn chỉ có thể đặt 'n1 :: x' khai báo ngay trong main.cpp trong trường hợp đó. Xem ví dụ đã chỉnh sửa của tôi. – greatwolf

+1

Cảm ơn bạn. Nó hiện đang hoạt động :) – Jatin

3

Từ nhận xét của bạn, có vẻ như bạn chỉ muốn 2 .cpp tệp. Trong trường hợp đó, sau đây sẽ thực hiện công việc:

//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 
+2

Cảm ơn bạn. Nó hiện đang hoạt động. – Jatin

Các vấn đề liên quan