Eclipse mit mingw, Probleme nach Umstieg von VisualC++



  • Hallo,

    ich habe seit einer Weile ein Projekt in Visual C++ entwickelt.
    Nun wollte ich, wegen der Möglichkeit das Ganze dann unter Linux zu kompilieren,
    auf Eclipse mit CDT und mingw als Compiler umsteigen.

    Das Projekt lief auf VisualC++. Es dauerte dann 2 Tage, bis sich die Engine wieder kompilieren ließt. Musste viele kleine Sachen anpassen, da ist wohl VisualC++ großzügiger.

    Allerdings läst sich das Hauptprogramm, welches auf der Engine und vielen Templates darin basiert, nicht kompilieren.

    Gibt es da generell Unterschiede zwischen VisualC++ und mingw im Umgang mit Templates ?

    Ich habe zB. sowas, nur Beispielcode:

    template <KEY,VALUE>
    class ListWithKey
    {
        // Klasse mit Liste von Elementen, mit Schlüssel
        // Methoden zum Lesen und Schreiben
        // zB at(...) und size()
    };
    
    dann eine Klasse, welche von ListWithKey erbt und Methoden hinzufügt
    der Schlüsseltyp ist dann aber nur std::string
    
    template <VALUE>
    class ListXml :
        public ListWithKey<std::string, VALUE>
    {
        void writeToTree(XmlTree& tree)
        {
            // der VALUE-Typ hat eine Methode writeToTree()
            for(int i=0;i<size();i++)
            {
                // noch mehr Code
                at(i).writeToTree(tree);
            }
        }
    };
    

    Und eben das size() und at() in der abgeleiteten Klasse will der mingw nicht
    verstehen und behauptet, die Declaration von size() und at() wäre nicht verfügbar.
    Diese ist natürlich inkludiert, sonst könnte ja die neue Klasse nicht erzeugt werden.
    Ich habe dann mal ListWithKeystd::string,VALUE::at() und size() probiert.
    Da meint der Compiler aber, size() und at() kann man nur verwenden, wenn ein Objekt vorhanden ist, also es läßt sich nur auf eine Instanz anwenden.
    Nur ist ja die Instanz der Tochterklasse dann eine solche.

    Geht dies vielleicht so nicht mit mingw oder ist da im Konzept ein Fehler meinerseits ?

    Wie bereits gesagt, mit VisualC++ läuft dies so.

    Grüße

    Mike


Anmelden zum Antworten