Tôi đang cố gắng triển khai các con trỏ sau cho một mảng hàm thành viên:
IOperand* OpCreate::createOperand(loại eOperandType,
const std::string&val)
{
size_t nó = 0;
Tab OpPtrTab[] =
{
{Int8, &OpCreate::createInt8},
{Int16, &OpCreate::createInt16},
{Int32, &OpCreate::createInt32},
{Float, &OpCreate::createFloat},
{Double, &OpCreate::createDouble},
{Không xác định, NULL}
};
while ((tab[it]).type != Không xác định)
{
if ((tab[it]).type == loại)
return ((tab[it]).*((tab[it]).funcPtr))(val);
nó++;
}
trả về NULL;
}
Từ các lớp sau:
lớp OpTạo
{
công cộng:
cấu trúc OpPtrTab
{
const loại eOperandType;
IOperand* (OpCreate::*funcPtr)(const std::string&);
};
IOperand* createOperand(eOperandType, const std::string&);
ChọnTạo();
~OpCreate();
riêng tư :
IOperand* createInt8(const std::string&);
IOperand* createInt16(const std::string&);
IOperand* createInt32(const std::string&);
IOperand* createFloat(const std::string&);
IOperand* createDouble(const std::string&);
};
Tôi không thể thấy mình đang làm gì sai, nhưng đây là lỗi trình biên dịch:
OpCreate.cpp: Trong hàm thành viên 'IOperand* OpCreate::createOperand(eOperandType, const string&)':
OpCreate.cpp:66:39: error: con trỏ tới loại thành viên 'IOperand* (OpCreate::)(const string&) {aka IOperand* (OpCreate::)(const std::basic_string&)}' không tương thích với loại đối tượng 'OpCreate::OpPtrTab'
Có vẻ như lệnh gọi hoặc quá trình khởi tạo của tôi không khớp với nguyên mẫu nhưng tôi không hiểu tại sao.
Bạn truyền con trỏ hàm thành viên tab[it].funcPtr
áp dụng cho tab[nó]
đối tượng, nhưng nó không trỏ đến Tab chức năng thành viên[it]
sự vật.
Tôi nghĩ bạn muốn áp dụng nó vàocái này
:
(this->*(tab[it].funcPtr))(val);
Tôi là một lập trình viên xuất sắc, rất giỏi!