<unresolved overloaded function type> wenn Sie versuchen, um eine aggregierte Methode eines Objekts zu seiner Klasse Methode
Ich habe einige Probleme kompilieren meines Codes.
Ich habe die folgende Struktur:
#include <cstdlib>
using namespace std;
typedef double (*FuncType)(int );
class AnotherClass {
public:
AnotherClass() {};
double funcAnother(int i) {return i*1.0;}
};
class MyClass {
public:
MyClass(AnotherClass & obj) { obj_ = &obj;};
void compute(FuncType foo);
void run();
protected:
AnotherClass * obj_; /*pointer to obj. of another class */
};
void MyClass::compute(FuncType foo)
{
int a=1;
double b;
b= foo(a);
}
void MyClass::run()
{
compute(obj_->funcAnother);
}
/*
*
*/
int main(int argc, char** argv) {
AnotherClass a;
MyClass b(a);
b.run();
return 0;
}
Wenn ich versuche zu kompilieren, es gibt:
main.cpp:39:31: error: no matching function for call to ‘MyClass::compute(<unresolved overloaded function type>)’
main.cpp:30:6: note: candidate is: void MyClass::compute(double (*)(int))
Was ist hier falsch?
p/s/AnotherClass * obj_;
so bleiben soll, denn ich Schreibe eine Funktion, die große Bibliothek und kann es nicht ändern.
-------------- funktionierende version von Benjamin -------
#include <cstdlib>
using namespace std;
class AnotherClass {
public:
AnotherClass() {};
double funcAnother(int i) {return i*1.0;}
};
struct Foo
{
/*constructor*/
Foo(AnotherClass & a) : a_(a) {};
double operator()(int i) const
{
return a_.funcAnother(i);
}
AnotherClass & a_;
};
class MyClass {
public:
MyClass(AnotherClass & obj) { obj_ = &obj;};
template<typename FuncType>
void compute(FuncType foo);
void run();
protected:
AnotherClass * obj_; /*pointer to obj. of another class */
};
template<typename FuncType>
void MyClass::compute(FuncType foo)
{
int a=1;
double b;
b= foo(a);
}
void MyClass::run()
{
Foo f(*obj_);
compute(f);
}
/*
*
*/
int main(int argc, char** argv) {
AnotherClass a;
MyClass b(a);
b.run();
return 0;
}
Ich danke Ihnen allen sehr für die Hilfe!
Bitte schreiben Sie einen minimalen beleidigen Beispiel. Der Fehler ist nicht verursacht durch den code, den Sie uns zeigen.
Bitte poste realen code (cut down, um ein minimal-Beispiel), keine pseudo-code.
Sieht aus wie Sie erklärt
Reproduzieren Sie das problem in einem minimal-Programm, dann poste den kompletten code.
es gibt keine member-Funktion
Bitte poste realen code (cut down, um ein minimal-Beispiel), keine pseudo-code.
Sieht aus wie Sie erklärt
funcAnother
als member-Funktion. Wenn Sie machen es zu einem static
Klasse Funktion sollte es funktionieren. Natürlich, wenn es Referenzen, es wird nicht funktionieren und Sie brauchen einen anderen Ansatz.Reproduzieren Sie das problem in einem minimal-Programm, dann poste den kompletten code.
es gibt keine member-Funktion
void run()
im class MyClass
. Auch die AnotherClass
definiert werden(oder wenigstens vorwärts deklariert) werden, bevor MyClass
InformationsquelleAutor Denis | 2011-08-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die folgende Funktion der Klasse wird mit der Signatur Ihres FuncType:
Ändern MyClass::berechne zu einer Vorlage folgendermassen:
Dann kann man rufen wie diese:
Wenn Ihr compiler unterstützt Lambda-Ausdrücke (und es gibt eine gute chance, es tut), dann kann man darauf verzichten, die Funktion Klasse und definieren Sie einfach laufen wie diese:
Es funktioniert, danke!
InformationsquelleAutor Benjamin Lindley
Da,
ist eine member-Funktion übergibt eine implizite
this
und dann der Prototyp entspricht nicht der Art Ihrer Funktion Zeiger.Den typedef für Zeiger auf member-Funktion sein sollte:
Hier ist eine modifizierte kompilierbare version des Codes. Bitte überprüfen Sie die inline-Kommentare, die Veränderungen zu verstehen, Auch ich verließ die anderen details, die Sie hinzufügen können.
Dies ist wohl nicht der Fehler (aber das ist ein Fehler mit den code trotzdem). Der Fehler kommt aus versuchen, weisen Sie eine überladene Funktion name an eine Funktion Zeiger.
Aktualisiert die Antwort. Sie müssen, tun Sie Folgendes: 1. Post der eigentliche Beispiel-code, 2. Post - komplette Beispiel, Das update oben löst one der Fehler gesehen in deinem code, Es löst nicht Fehler, die du gepostet hast, das ist wahrscheinlich, weil Sie mehrdeutig überladene Funktionen innerhalb Ihrer Klasse, und Sie werden versuchen, Sie zu benutzen.
Ich aktualisierte den code. Habe auch versucht, deine Lösung, aber es löst nicht das problem, habe noch 'unresolved overloaded function' Fehler.
Updaed die Antwort, Folgen Sie dem link, um die kompilierbare version des Codes.
InformationsquelleAutor Alok Save