Tôi đang sử dụng thư viện libcxx mới và tôi có một mã gọi hàm socket bind()
. Vấn đề là khi tôi gõ using namespace std;
trình biên dịch mang lại cho tôi một lỗi cho đoạn mã sau:Biên dịch mã sử dụng hàm bind() với libcxx không thành công
int res = bind(sockfd, (struct sockaddr *)&myAddr, sizeof(myAddr));
Lỗi sử dụng kêu vang (svn xây dựng):
error: no viable conversion from '__bind<int &, sockaddr *, unsigned long>' to 'int'
int res = bind(sockfd, (struct sockaddr *)&myAddr, sizeof(myAddr));
Tôi nghĩ rằng vấn đề là using namespace std;
mang hàm std::bind()
từ tiêu đề <functional>
đến phạm vi (mặc dù tiêu đề không được bao gồm). Vì tôi đang sử dụng thư viện của bên thứ ba sử dụng toàn bộ không gian tên nên tôi không thể dễ dàng thay đổi tên lớp thành tên đủ điều kiện.
Tôi đã tự hỏi liệu đây có phải là vấn đề trong việc triển khai thư viện hay không hoặc có một số quy tắc mới trong C++ 11 có khả năng phá vỡ mã cũ sử dụng bind()
hay không. Bất kỳ suy nghĩ về điều này sẽ được đánh giá cao.
Cảm ơn
La Mã
Bạn có ý gì khi nói rằng thư viện của bên thứ ba sử dụng toàn bộ không gian tên? – Troubadour
Tôi có nghĩa là nó có 'sử dụng không gian tên std;' trong một số tệp. –
Có lẽ chỉ trong các tệp nguồn chứ không phải trong tiêu đề? Điều đó không ảnh hưởng đến bạn chút nào. – Troubadour