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.


Log in to reply