2015-07-23 23 views
7

Tôi đang cố gắng viết một hàm có hai số và in ra tổng của chúng."Sử dụng dấu cộng() không rõ ràng" lỗi

#include <iostream> 

using namespace std; 

int plus(int, int); 

int main() { 
int a, b, result; 
cout << "2 numbrs"; 
cin>>a>>b; 
result = plus(a,b); 
cout << result; 
return 0; 
} 

int plus(int a,int b) { 
int sum; 
sum = a+b; 
return sum; 
} 

và lỗi tôi nhận được:

Nó rất chương trình
use of `plus' is ambiguous 

của tôi đầu tiên C++ và trong thực tế tôi nhận được mù tìm lỗi.

+13

Chúng tôi cần tuyên bố chiến tranh toàn diện về 'sử dụng không gian tên std;'. –

+3

@FredLarson Rất tò mò làm thế nào gần như tất cả các sách/hướng dẫn lập trình giới thiệu sử dụng sử dụng không gian tên std; mà không giải thích chính xác điều đó có nghĩa là gì và khi nào bạn thực sự nên sử dụng nó. (Hầu hết thời gian bạn không nên) –

+0

Trong thực tế, tôi đọc giải thích tốt những gì đang xảy ra khi sử dụng sử dụng không gian tên std, nhưng tôi đã không nhận ra rằng có thể gây ra vấn đề này. – Jac08H

Trả lời

19

Hoặc làm

result = ::plus(a,b); 

Hoặc đổi tên hàm. Đây là một bài học hay về lý do tại sao using namespace std không được coi là thực hành tốt.

+0

Vâng, nó hoạt động. Cảm ơn bạn đã phản hồi nhanh. – Jac08H

+4

@ Jac08H Đọc http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice –

+2

@ Jac08H Không cần đánh dấu câu hỏi của bạn là cố định. Bạn chỉ có thể chấp nhận câu trả lời thích hợp. – yizzlez

14

Đã có đối tượng hàm trong stdnamespace được gọi là plus. Do using namespace std;, std::plus này được đặt trong không gian tên chung, cũng là nơi đặt tên plus() của bạn. Khi bạn cố gắng gọi số plus() trình biên dịch không thể biết liệu bạn đang đề cập đến std::plus hoặc plus() vì chúng đều nằm trong không gian tên chung.

Bạn có các tùy chọn sau:

  1. Di using namespace std; (sau đó bạn sẽ cần phải hội đủ điều kiện chức năng khác trong không gian tên std - ví dụ std::cout).
  2. Đặt plus() vào không gian tên riêng của mình (ví dụ: mine) và gọi điện bằng cách sử dụng mine::plus(a, b).
  3. Call your function with ::plus() as suggested (giả sử bạn không đặt nó trong không gian tên của chính nó).
  4. Đổi tên hàm để không có xung đột tên.
+0

'std :: plus' không phải là hàm, nó là đối tượng hàm. Nếu bạn muốn gọi nó, bạn cần phải làm 'std :: plus() (a, b)' hoặc 'std :: plus {} (a, b)'. –

+0

@LaurentLARIZZA Đã sửa lỗi. Cảm ơn. – Null

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