2016-06-01 7 views
-3

Also versuche ich im Moment eine Methode innerhalb einer <translator> Klasse zu starten, indem ich eine Instanz einer <bintree> Klasse von meiner main.cpp übergeben. Das Folgende ist mein Code, mit dem Fehler, den ich unten bekomme. Ich bin mir sicher, dass mir nur ein Aspekt fehlt, wenn ich Parameter übergebe, aber für das Leben von mir kann ich es nicht herausfinden.C++ 'Klasse' wurde nicht deklariert - Klasse an Klasse übergeben

main.cpp (Bereich, in dem es schafft Bintree und wo es passiert ist) Unterm Strich relevanteste

if (validFile == true) 
{ 
    //Create bintree through insert. Rebalance follows 
    bintree<morseNode> morseTree; 
    for (int count = 0; count < 26; count++) 
    { 
    char letter = morseCodes[count].letter; 
    string code = morseCodes[count].code; 
    morseNode node; 
    node.letter = letter; 
    node.code = code; 
    morseTree.insert(node); 
    } 
    morseTree.rebalance();  
    translator fileTranslator(outputFile);//create instance of translator 

    //Read and translate files based on conversion type 
    if (translatorType != "e" || translatorType != "E") //English -> Morse Conversion 
    { 
    validFile = readFile(inputFile, translatorType, morseCodes, inputList); 
    if (validFile == true) 
    { 
     fileTranslator.engToMorseTranslation(inputList, morseCodes); 
    } 
    } 
    else //Morse -> English Conversion 
    { 
    validFile = readFile(inputFile, translatorType, morseCodes, inputList); 
    if (validFile == true) 
    { 
     fileTranslator.morseToEngTranslation(inputList, morseTree); 
     //Here is where it sends morseTree that is throwing ^^ the error. 
    } 
    } 

ich es durch translator.h empfange (edit: es kennt die consts für morseNode)

#ifndef TRANSLATOR_H 
#define TRANSLATOR_H 

#include <string> 
#include <iostream> 
#include <list> 

//I tried #include "bintree.h" here. this did not work 

using namespace std; 

class translator 
{ 
private: 
    string outName; 
    list<char> morseOutput; 
public: 
    void morseToEngTranslation(list<char> &myList, bintree<morseNode> &myTree) 
{ 
    //functions here.. seemed irrelevant as i just wanted to show how i am 
    //receiving the parameters 
} 
}; 
#endif 

Bintree ist nicht meins, es wurde zur Verfügung gestellt. die Startanmeldungen wie folgt. Es ist sehr lang so und die Funktionen selbst sind nicht wichtig für dieses Problem, also werde ich sie nicht einschließen.

#ifndef BINTREE_H_ 
#define BINTREE_H_ 

#include <stdexcept> 

namespace treespc 
{ 
    // forward class declaration 
    template <typename dataType> class bintree; 
    template <typename dataType> class binnode; 

    #include "const_iterator.h" 
    #include "binnode.h" 

    /********************************************************\ 
     template class for a binary tree 
    \********************************************************/ 

    template <typename dataType> class bintree 
    { 
     public: 
     //.... 

     private: 
     //.... 
    }; 
} 

und die Fehler i empfangen sind:

translator.h:79:52: error: ‘bintree’ has not been declared 
    void morseToEngTranslation(list<char> &myList, bintree<morseNode> &myTree) 



translator.h:79:59: error: expected ‘,’ or ‘...’ before ‘<’ token 
    void morseToEngTranslation(list<char> &myList, bintree<morseNode> &myTree) 

danken Ihnen im Voraus für jeden, der mir zumindest in die richtige Richtung zeigen kann :)

+0

http://stackoverflow.com/questions/553682/when-can-i-use-a-forward-declaration (Forward-Deklaration) –

+0

Setzen Sie keine anderen Includes in den 'Namespace {'; Wenn Sie möchten, dass sich Zeug in einem Namespace befindet, dann setzen Sie die entsprechenden Namespace-Definitionen in den anderen Header –

+0

Wo ist MorseNode definiert? – thorsan

Antwort

2

den Namespace für Bintree Geben Sie entweder mit using namespace treespec oder treespc::bintree

#ifndef TRANSLATOR_H 
#define TRANSLATOR_H 

#include <string> 
#include <iostream> 
#include <list> 

#include "bintree.h" 

using namespace std; 

class translator 
{ 
private: 
    string outName; 
    list<char> morseOutput; 
public: 
    void morseToEngTranslation(list<char> &myList, treespc::bintree<morseNode> &myTree) 
{ 
    //functions here.. seemed irrelevant as i just wanted to show how i am 
    //receiving the parameters 
} 
}; 
#endif 
+0

Das ist absolut richtig. Kredit an @ M.M, der es erstmals in einem Kommentar zum Post erwähnt hat. Aber danke, dass du es dir ausgedacht hast. Ich vermisste den Namensraum namespace! Ich danke Ihnen allen so sehr, dass ich mich dumm fühle, wenn ich das vermisse: P –

-1
ifndef BINTREE_H_ 
#define BINTREE_H_ 

Sind Sie ein fehlendes # hier?

UPDATE: Sie müssen Bintree Kopf- oder Verwendung Vorwärtsdeklaration (Vorsicht, wie Ihre Klasse in dem Namespace ist) umfassen Antworten Siehe hier: Why can't I forward-declare a class in a namespace like this?

+0

Ja, sorry innerhalb des Programms ist es da. Nur schlecht kopieren und einfügen. Behoben. –