Đó là một con trỏ, vì vậy thay vào đó hãy thử:
a->f();
Về cơ bản, toán tử .
(được sử dụng để truy cập các trường và phương thức của một đối tượng) được sử dụng trên các đối tượng và tham chiếu, vì vậy:
A a;
a.f();
A& ref = a;
ref.f();
Nếu bạn có một loại con trỏ, trước tiên bạn phải tham khảo nó để có được tham chiếu:
A* ptr = new A();
(*ptr).f();
ptr->f();
Các a->b
ký hiệu thường chỉ là một viết tắt cho(*a).b
.
Một lưu ý về con trỏ thông minh
Có operator->
thể bị quá tải, điều này đáng chú ý được sử dụng bởi các con trỏ thông minh. Khi bạn đang sử dụng con trỏ thông minh , thì bạn cũng sử dụng ->
để tham chiếu đến đối tượng được trỏ:
auto ptr = make_unique<A>();
ptr->f();