2010-04-12 29 views
11

Tôi có thành viên sau đây của lớp học foo.Trả lại tài liệu tham khảo từ lớp này đến số

foo &foo::bar() 
{ 
    return this; 
} 

Nhưng tôi gặp phải lỗi trình biên dịch. Điều ngu ngốc gì tôi đang làm sai?

Compiler error (gcc): lỗi: khởi tạo không hợp lệ tham chiếu không const kiểu 'foo &' từ một tạm thời của loại 'foo * const'

Trả lời

21

this là một con trỏ. Vì vậy, nó phải là return *this;

+0

Cảm ơn tôi nên biết rằng :) – Thomas

6

Như Naveen chỉ ra, bạn cần phải trả lại *this.

Chỉ cần mẹo nhanh: cách để tìm ra những lỗi biên dịch hơi mơ hồ có nghĩa là thử biên dịch trên trình biên dịch khác để xem có thông điệp hay hơn không. Ví dụ: bạn có thể sử dụng Comeau online.

Trong trường hợp này nó mang lại:

"ComeauTest.c", line 7: error: initial value of reference to non-const must be an 
      lvalue 
    return this; 
      ^

Không chắc nó tốt hơn trong trường hợp này - nhưng trong một số trường hợp, các thông điệp là cách tốt hơn.

+0

+1 cho mẹo nhanh. Nó có thể được thực sự làm rõ. – Francesco

+1

thực sự, MSVC 2008 trả về, "lỗi C2440: 'return': không thể chuyển đổi từ 'foo * const' thành 'foo &'", mà tôi nghĩ là khá rõ ràng. –

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