Bu sorunun birçok yerde var olduğunu biliyorum. Ancak, örneklerin hiçbiri sorunumu çözmeme yardımcı olmadı.‘void (myClass :: *)() öğesini void (*)() dönüştürebilir()
yöntem işaretçisi yöntemini (bir sınıf içinde) oluşturmaya çalışıyorum, bu nedenle belirli koşullara göre sınıfın çeşitli yöntemlerinden birini ele alacaktır.
Statik bir işlev kullanmak için başarısız bir şekilde denedim (tahmin edersem nasıl yapılacağını anladım ...). Bazılarınızın bildiği gibi
myClass::myClass(int value){
if(value > 0){
send_msg = &methodA
}
else{
send_msg = &methodB
}
}
ve hatalar:
error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say ‘&myClass::methodA’ [-fpermissive]
error: cannot convert ‘void (myClass::)(const string&) {aka void (myClass::)(const std::basic_string&)}’ to ‘void ()(const string&) {aka void ()(const std::basic_string&)}’ in assignment
herhangi bir yardım olacaktır
class myClass
{
public:
myClass(int value);
void methodA(const string &msg);
void methodB(const string &msg);
void (*send_msg)(const string &msg);
};
ve cpp: Burada
başlık dosyasıdır çok takdir edildi. Ben arayamam kodunu kullanmak çalışıyorum gibi şimdisend_msg = &myClass::methodA;
Ama:
void (myClass::*send_msg)(const string &msg);
ve atama:
Düzenleme Jose sayesinde, bu derleme edilebilir işlev-işaretçisi:
this->myClass_instance.send_msg(line); //*****getting error*****
zaman this
, diğer sınıfın bir örneğidir. hatadır:
error: must use ‘.’ or ‘->’ to call pointer-to-member function in ‘((otherClass*)this)->otherClass::myClass_instance.myClass::send_msg (...)’, e.g. ‘(... ->* ((otherClass*)this)->otherClass::myClass_instance.myClass::send_msg) (...)’
ammm .. o kullanarak daha kolay, daha okunaklı ve daha kısa olmaz 'std :: function' ve bir lambda işlevi? –
@DavidHaim Bir örnek görmekten memnun olurum – Eli
'send_msg' kullanmayı nasıl düşünüyorsunuz? – Barry