2016-11-30 18 views
0

Jedes Mal, wenn ich ein neues Projekt an meinem Arbeitsplatz erstelle, stoße ich auf das Problem mit Vorlagen. Zum Beispiel erstelle ich eine neue Klasse, die CodeLite eine .h-Datei und eine .cpp-Datei für mich erstellt, und dann werde ich diese .cpp-Datei in eine .template ändern, indem ich die Datei umbenenne. Es funktioniert manchmal und manchmal nicht. Manchmal muss ich meinen Arbeitsplatz reinigen, damit es funktioniert, manchmal muss ich CodeLite beenden und es wieder öffnen. Diesmal funktionieren diese Lösungen nicht für mich, aber vielleicht fehlt mir etwas. Hier ist mein Code:Vorlagendatei funktioniert nicht korrekt in CodeLite?

.h-Datei

#ifndef TABLE1_H 
#define TABLE1_H 
#include <cstdlib> // Provides size_t 

namespace main_savitch_12A 
{ 
    template <class RecordType> 
    class table 
    { 
    public: 
     // MEMBER CONSTANT -- See Appendix E if this fails to compile. 
     static const std::size_t CAPACITY = 811; 
     // CONSTRUCTOR 
     table(); 
     // MODIFICATION MEMBER FUNCTIONS 
     void insert(const RecordType& entry); 
     void remove(int key); 
     // CONSTANT MEMBER FUNCTIONS 
     bool is_present(int key) const; 
     void find(int key, bool& found, RecordType& result) const; 
     std::size_t size() const { return used; } 
    private: 
     // MEMBER CONSTANTS -- These are used in the key field of special records. 
     static const int NEVER_USED = -1; 
     static const int PREVIOUSLY_USED = -2; 
     // MEMBER VARIABLES 
     RecordType data[CAPACITY]; 
     std::size_t used; 
     // HELPER FUNCTIONS 
     std::size_t hash(int key) const; 
     std::size_t next_index(std::size_t index) const; 
     void find_index(int key, bool& found, std::size_t& index) const; 
     bool never_used(std::size_t index) const; 
     bool is_vacant(std::size_t index) const; 
    }; 
} 
#include "table1.template" // Include the implementation. 
#endif 

.template Datei

template<class RecordType> 
table<RecordType>::table(){ 
    used = 32; 
} 

Hauptdatei

#include <stdio.h> 
#include "table1.h" 
int main(int argc, char **argv) 
{ 
    printf("hello world\n"); 
    return 0; 
} 

My t emplate und meine .h-Dateien heißen table1. Der Fehler, den ich beim Ausführen des Programms erhalte, befindet sich in der Vorlagendatei. Es lautet: "Tabelle nennt keinen Typ" Wie kann ich dieses Problem beheben?

Antwort

1

in Ihrer Vorlage Implementierung Sie den Namespace fehlen, verwenden Sie diese:

template <class RecordType> 
main_savitch_12A::table<RecordType>::table() 
{ 
    used = 32; 
}; 
+0

Das funktioniert richtig, aber wenn ich versuche, eine Tabelle Instanz in der Hauptdatei erstellen mit 'Tabelle h1;' es gibt mir In diesem Bereich wurde ein Fehler gemeldet, der besagt, dass die Tabelle nicht deklariert wurde. Wie behebe ich dieses Problem? – user2896120

+0

Hmm, ich muss den Namespace zuerst adressieren wie 'main_savitch_12A :: table h1;' Danke für deine Antwort Ich gebe dir die beste Antwort bald – user2896120

+0

Do 'main_savitch_12A :: table h1;' – Amadeus