C++ Problem mit Funktion und Template (?)

badday

Commander
Registriert
Sep. 2007
Beiträge
3.023
Moin zusammen,

ich habe folgendes Problem: Mein Programm wird nicht kompiliert, weil keine passende Funktion gefunden wird. Ich benutzt Templates und habe damit leider noch keine Erfahrung, daher bitte ich um Nachsicht.
Hier der Code:

Funktion:
Code:
template<typename T, typename ar>
T exec ( const ar &arg, QString fil=_filename, QString fun = _fuction,  const int res=1)
{
//...
}
( _filename und _function sind Membervariablen der Klasse, der auch exec angehört.)

Aufruf:
(KlassenObjekt.exec(ui->lineEdit->text(),"sinu.lua", "getsin")
(ui->lineEdit->text() gibt QStrign zurück, es handelt sich um Qt.

Fehlermeldung:
Fehler: keine passende Funktion für Aufruf von »Klasse::exec(QString, const char [9], const char [7])«

Weiß jemand, wo der Fehler ist?

Vielen Dank!

Gruß,

badday
 
ich bin dumm und habe Templates in c++ vor 5 oder 6 Jahren mal benutzt, daher sollte ich hier nicht antworten.

Aber: fehlt bei deinem aufruf von exec nicht ncoh der erste "const ar..." Parameter?

Falls das durch das Template geliefert wird, bitte nicht schlagen, sondern vergessen ;)
 
Es sollte so sein:
ui->lineEdit->text() wird als erstes Parameter übergeben (als arg), der Typ sollte durch das Template dargestellt werden.
Wie gesagt: So sollte es sein^^

Gruß,

badday
 
Ich hab Qt nie benutzt und mein C++ ist ein bisschen eingerostet, aber was passiert wenn du's mit
Code:
KlassenObjekt.exec(ui->lineEdit->text(), QString("sinu.lua"), QString("getsin"))
versuchst?
 
Steht die der Definition der Funktion in einer CPP Datei und die Deklaration in der Header Datei? Wenn ja schreibe mal die Definition mit in die Headerdatei.
 
@MATRIX_Morpheus: Hilft leider auch nicht, das sollte ohnehin implizit konvertiert werden.

@Legenbaer: Ja, so ist es. Habe es versuchsweise probiert, hat aber leider auch nicht geholfen. Soweit ich weiß, ist es doch normal, Funktionen in der .cpp Datei zu definieren und im Header zu deklarieren.

Hier mal einige weitere Infos:

So sieht die .pro-Datei aus (Auszug):
SOURCES += main.cpp \
mainwindow.cpp \
script.cpp
HEADERS += mainwindow.h \
script.h

script.h (Auszug):

class Script
{
public:
//...
template<typename T, typename ar>
T exec ( const ar &, QString , QString , const int a=1);
//...

};

script.cpp(Auszug):
#include "script.h"
//...
template<typename T, typename ar>
T Script::exec ( const ar &arg, QString fil=_filename, QString fun = _fuction, const int res=1)
{
//...
}

mainwindow.cpp:
#include "script.h"
//...
Script sinus;
ui->lineEdit_2->setText(sinus.exec(ui->lineEdit->text(),"sinu.lua", "getsin"));
//...

Leider weiß ich immer noch nicht, wo das Problem liegt, es kann auch ein grundlegend falsches Design sein.

Bei Bedarf von weiteren Infos bitte melden!

Gruß,

badday
 
Was mir gerade auffällt: Du versuchst die Template-Methode im .cpp File zu implementieren. Das wird afaik nicht funktionieren (keine Ahnung ob es inzwischen Compiler gibt die das unterstützen). Versuch mal die Implementierung in den Header zu verlegen.

Btw: Was für einen Compiler verwendest du? Ist die Fehlermeldung vom Compiler oder vom Linker?
 
@Gluehwurm: Klar, du hast natürlich recht. Da ich die GCC benutze, werde ich das Modell der einschließenden Kompilierung nutzen.
Danke dir!

Gruß,

badday
 
Zurück
Oben