Fehlermeldung "request for member `del' in `Conti', which is of non-class type `FGraph<Human> ()()"
-
Huhu,
ich hab mir einen recht einfachen Code geschrieben um ein wenig mehr übung bei templates zu bekommen, steh aber jetzt irgendwie an weil sich das Programm nicht umwandeln lässt.
FGraph.h:
#ifndef FGRAPH_H_ #define FGRAPH_H_ // irgendwas irgendwann hier template<class T> class FGraph { public: // int fwd_Iter; FGraph(); ~FGraph(); void addDescendant(T x,T y); void addDirectDescendant(T x,T y); bool isDescendant(T x,T y); void del(T x); void print(); private: }; #endif /*FGRAPH_H_*/
FGraph.cpp
#include "FGraph.h" using namespace std; // irgendwann irgendwas template <class T> FGraph<T>::FGraph(){} template <class T> FGraph<T>::~FGraph(){} template <class T> void FGraph<T>::del(T x){ // nix }
Human.h
#ifndef HUMAN_H_ #define HUMAN_H_ #include <string> using namespace std; // irgendwann irgendwas class Human { public: string m_Nationality; string m_Name; Human(string Name); ~Human(); }; #endif /*HUMAN_H_*/
Human.cpp
#include "Human.h" using namespace std; // irgendwas irgendwann Human::Human(string Name){ m_Name = Name; } Human::~Human(){ }
main.cpp
#include <iostream> #include <string> #include "Human.h" #include "FGraph.h" using namespace std; int main(int argc, char *argv[]){ // hier kommt irgendwann mal etwas her Human MaxM("Max"); FGraph<Human> Conti(); Conti.del(MaxM); return 0; }
Bei mir kommt wenn ich das so umwandeln möchte der Fehler "..\main.cpp:13: error: request for member `del' in `Conti', which is of non-class type `FGraph<Human> ()()'"
könnte mir das einer erklären was ich falsch gemacht habe? Versteh es irgendwie nicht
-
Mann kann Templates nicht wie normalen Programmcode in h- und cpp-Dateien aufteilen.
Beachte daher zuerst denn Punkt 5 der meistgestellten Fragen
http://www.c-plusplus.net/forum/viewtopic-var-t-is-151578.html
und melde dich denn wieder, falls noch Fehler auftauchen.
-
hab ich mir durchgelesen und glaube auch verstanden. Aber weiter geholfen hat es mir leider trotzdem nicht.
Ich hab jetzt die FGraph.cpp gelöscht und stattdessen in der FGraph.h ein {} hinter die Funktionen geschrieben (will ja nur mal das der Aufruf funktioniert.
Die "neue" FGraph.h schaut damit so aus:
#ifndef FGRAPH_H_ #define FGRAPH_H_ // irgendwas irgendwann hier template<class T> class FGraph { public: // int fwd_Iter; FGraph(){}; ~FGraph(){}; void addDescendant(T x,T y); void addDirectDescendant(T x,T y); bool isDescendant(T x,T y); void del(T x){}; void print(); private: }; #endif /*FGRAPH_H_*/
bekomm aber noch immer:
..\main.cpp:13: error: request for member `del' in `Conti', which is of non-class type `FGraph<Human> ()()'
-
Hab es jetzt auch nochmal mit wirklicher Funktionsdekl. versucht:
#ifndef FGRAPH_H_ #define FGRAPH_H_ // irgendwas irgendwann hier template<class T> class FGraph { public: // int fwd_Iter; FGraph(){}; ~FGraph(){}; void addDescendant(T x,T y); void addDirectDescendant(T x,T y); bool isDescendant(T x,T y); void del(T x); void print(); private: }; template <class T> void FGraph<T>::del (T x) { //irgendwann } #endif /*FGRAPH_H_*/
leider noch immer der selbe Fehler
edit: hab auch über die suchfunktion nix zu dem fehler gefunden das mir weiter hilft.
-
Ok ich habs jetzt glaub ich von allein rausgefunden.
Ich weiß nicht genau warum ich () bei der deklaration von der Klasse FGraph geschrieben habe.
Ohne funktioniert das umwandeln jetzt.