Tôi tự hỏi, tại sao nó không được phép viết:Tuyên bố và khai báo có định nghĩa. Tại sao điều này không được phép?
struct foo {
void bar(); // declaration
void bar(){std::cout << "moo" << std::endl;} // declaration + definition
};
Chức năng được khai báo hai lần (tôi nghĩ đây là ok) và xác định một lần. Tuy nhiên, trình biên dịch của tôi phàn nàn về:
decldef.cxx:7:10: error: 'void foo::bar()' cannot be overloaded
Tại sao nó không được phép?
Tại sao trình biên dịch của tôi (g ++ 4.7.2) giải thích điều này là quá tải?
PS: Tôi biết cách viết "đúng cách", nhưng tôi chỉ muốn biết, tại sao ở trên là sai.
Thật vậy, nhưng câu hỏi này không chạy sâu hơn thế, theo ý kiến của tôi ít nhất. Ví dụ, nếu 'struct' được thay thế bằng' namespace' thì mã đó là hợp lệ. – Bathsheba
Câu hỏi hay, thực sự.Phần "+ định nghĩa" thực sự không liên quan; ngay cả một tuyên bố lặp đi lặp lại với chữ ký giống hệt nhau không được phép ở đây. – mindriot