Tôi đang gặp lỗi biên dịch (MS VS 2008) mà tôi không hiểu. Sau khi lộn xộn với nó trong nhiều giờ, tất cả đều mờ và tôi cảm thấy như có điều gì đó rất rõ ràng (và rất ngu ngốc) mà tôi đang thiếu. Đây là mã thiết yếu:Làm cách nào để gọi hàm con trỏ thành thành viên?
typedef int (C::*PFN)(int);
struct MAP_ENTRY
{
int id;
PFN pfn;
};
class C
{
...
int Dispatch(int, int);
MAP_ENTRY *pMap;
...
};
int C::Dispatch(int id, int val)
{
for (MAP_ENTRY *p = pMap; p->id != 0; ++p)
{
if (p->id == id)
return p->pfn(val); // <--- error here
}
return 0;
}
Trình biên dịch tuyên bố tại mũi tên "thuật ngữ không đánh giá đối số tham gia 1 đối số". Tại sao không? PFN được prototyped như một hàm lấy một đối số, và MAP_ENTRY.pfn là một PFN. Tôi đang thiếu gì ở đây?
Cú pháp C bị gỉ, do đó không được thêm vào làm câu trả lời, nên không được trả về (* (p-> pfn)) (val); "? - –
Không, điều đó tạo ra lỗi "* bất hợp pháp trên các toán hạng của loại C :: PFN". – chrisd
có thể trùng lặp của [Gọi phương thức lớp C++ thông qua một con trỏ hàm] (http://stackoverflow.com/questions/1485983/calling-c-class-methods-via-a-function-pointer) –