tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Steiner_B
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
268
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    deh3nne deh3nne ist offline Mitglied
    Registriert seit
    Dec 2008
    Beiträge
    20
    Hallo,

    Wir schreiben ein Projekt in Cpp und haben derzeit einige Probleme.
    Im Anhang befinden sich die Dateien eines stark reduzierten Beispielprojektes, welches den Fehler den wir haben sehr gut sichtbar macht.

    Folgendes Problem:

    Wir erzeugen in der Klasse SqlStruct eine Instanz von Select im Header

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    namespace sql{
        class SqlStruct
        {
        public:
            sql::Select s;
     
            SqlStruct(void);    
            SqlStruct(std::string statement);
            ~SqlStruct(void);
            
            bool accept(Visitor v);
        };
    };

    in der Cpp führen wir auf dieses Select eine Methode aus:
    Code :
    1
    2
    3
    4
    5
    6
    
    sql::SqlStruct::SqlStruct(std::string statement)
    {
        s = sql::Select();
        s.test();
        std::cout << "please instert SQL Expression:" << std::endl << std::endl;
    }

    das funktioniert nun...

    Wenn wir aber in der Klasse Select nun eine Änderung z.B. in der Methode die ausgeführt wird vornehmen dann bekommen wir einige Fehler. Wenn wir diese Änderungen nun rückgängig machen und dann kompilieren und ausführen erhalten wir aber die selben Fehler. Erst wenn wir die definition von Select im Sqlstruct auskommentieren, kompilieren und wieder mit reinnehmen und dann kompilieren gehts wieder...

    Wir sind ratlos und hoffen auf eure Hilfe...

    Ps: getestet in VS2010_Sp1 und bloodshed alle Dateien auch im Anhang
    Angehängte Dateien Angehängte Dateien
     

  2. #2
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Was für Fehler bekommt ihr denn?
     

  3. #3
    deh3nne deh3nne ist offline Mitglied
    Registriert seit
    Dec 2008
    Beiträge
    20
    Stimmt, das wäre noch praktisch:

    Code :
    1
    2
    3
    4
    5
    
    Fehler  2   error C2039: 'Select': Ist kein Element von 'sql'   ...\sqlstruct.hpp   16
    Fehler  3   error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 's' ...\sqlstruct.hpp   16
    Fehler  4   error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.   ...\sqlstruct.hpp   16
    Fehler  5   error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.   ...\sqlstruct.hpp   16
        6   IntelliSense: "namespace "sql"" hat keinen Member ""Select"".   ...\sqlstruct.hpp   16

    Zeile 16 entspricht:
    Code :
    1
    
            sql::Select s;
     

  4. #4
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Vermutlich kommt der Compiler mit den Namespaces durcheinander, weil du dir selbst einen mit Namen sql definierst und gleichzeitig einen anderen verwendest in dem z.B.: das Select drin ist. Die Fehlermeldungen bedeuten einfach nur das der Typ sql:Select nicht aufgelöst werden kann.
     

  5. #5
    deh3nne deh3nne ist offline Mitglied
    Registriert seit
    Dec 2008
    Beiträge
    20
    Welche Lösung schlägst du vor?
     

  6. #6
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Hab grad versucht mit deinen Code Dateien ein funktionierendes Programm zu bauen. Das mit den Namespaces war nur halb richtig, das eigentliche Problem ist wie du mit den zyklischen Abhängigkeiten umgehst:

    Du darfst wenn du in einer Datei (z.B.: SqlStruct.hpp) einen Prototyp anlegst nicht auch das zugehörige Headerfile inkludieren, sondern must dies in der cpp Datei machen:

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    /* SqlStruct.hpp */
    #pragma once
     
    #include <string>
    #include <iostream>
     
    //Diese Zeile muss hier weg...
    //#include "Visitor.hpp"
    #include "Select.hpp"
     
     
    class Visitor;
     
    namespace sql{
        class SqlStruct
        {
        public:
            sql::Select s;
     
            SqlStruct(void);    
            SqlStruct(std::string statement);
            ~SqlStruct(void);
            
            bool accept(Visitor v);
        };
    };

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    /* SqlStruct.cpp */
    #include "SqlStruct.hpp"
     
    //... dafür muss es da her
    #include "Visitor.hpp"
     
    sql::SqlStruct::SqlStruct(void)
    {
    }
     
    sql::SqlStruct::SqlStruct(std::string statement)
    {
        s = sql::Select();
        s.test();
        std::cout << "please instert SQL Expression:" << std::endl << std::endl;
    }
     
     
    sql::SqlStruct::~SqlStruct(void)
    {
    }
     
    bool sql::SqlStruct::accept(Visitor v)
    {
        return false;
    }

    Selbiges gilt auch für die Select.hpp und Select.cpp.

    Zweitens gehört in der Visitor.hpp definitiv kein Prototyp für die SqlStruct Klasse hin.
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    #pragma once
     
    #include <string>
    #include <iostream>
     
    #include "Sqlstruct.hpp"
     
    //Weg damit, da zyklische Abhängigkeiten nur an einer Stelle gelöst werden sollten
    /*namespace sql{
        class SqlStruct;
    };*/
     
    class Visitor
    {
    public:
        Visitor(void);
        ~Visitor(void);
        
        bool visit(sql::SqlStruct sql_Structure);
    };
    deh3nne bedankt sich. 

  7. #7
    deh3nne deh3nne ist offline Mitglied
    Registriert seit
    Dec 2008
    Beiträge
    20
    Vielen Dank für die schnelle und kompetente Hilfestellung
     

Ähnliche Themen

  1. Tabellen – ein Mysterium?
    Von localex im Forum HTML & XHTML
    Antworten: 1
    Letzter Beitrag: 31.10.07, 12:03
  2. Green Mysterium
    Von burnobaby im Forum Bildbearbeitung & Illustration
    Antworten: 3
    Letzter Beitrag: 30.07.06, 11:08
  3. Mysterium Flash Player 8
    Von wavetraxx im Forum Flash Plattform
    Antworten: 5
    Letzter Beitrag: 28.03.06, 11:15
  4. Das Xerox Mysterium
    Von reBourne im Forum Smalltalk
    Antworten: 2
    Letzter Beitrag: 08.04.05, 21:08
  5. Mein Webserver: ein Mysterium ?
    Von gothic ghost im Forum Hosting & Webserver
    Antworten: 6
    Letzter Beitrag: 15.04.04, 02:05