void foo(int)
{
}
class X
{
void foo()
{
}
void bar()
{
foo(42);
// error: no matching function for call to 'X::foo(int)'
// note: candidate is:
// note: void X::foo()
// note: candidate expects 0 arguments, 1 provided
}
};
Tại sao C++ không thể gọi hàm miễn phí (đó là hàm duy nhất có chữ ký chính xác)?chức năng thành viên ẩn chức năng miễn phí
Trong trường hợp này, bạn có thể sử dụng ':: foo (42)' để truy cập foo bên ngoài. [Bản trình diễn Ideone] (http://ideone.com/6HljO). Nhưng tôi không biết nhiều về không gian tên. –
Tôi coi đây là một gót chân Achilles của C++. Nó làm cho việc sử dụng các tên hàm miễn phí quá tải phổ biến không thể, chẳng hạn như isempty (điều), nơi có quá nhiều sự quá tải đối với các loại thứ isempty, trong khi cho phép một thing.isempty() tồn tại. Ngu ngốc, không may, vụng về. – Mordachai