Probleme beim re-kompilieren eines existierenden Programms



  • Hallo zusammen,

    ich stehe gerade vor dem Problem, ein bereits im Einsatz befindliches Programm meines Vorgängers neu kompilieren zu "dürfen".
    Wie so oft, wurde hier leider kein Wert auf Dokumentation, etc. gelegt. Also ist ausprobieren angesagt.
    Einige Compiler-Errors habe ich schon eliminieren können. Bei den restlichen stehe ich allerdings auf dem Schlauch.

    Der aktuelle Compiler-Aufruf lautet wie folgt:

    c++ -I/usr/local/include -I/srv/develop/BOAL/boallib_41/create-lib -I/opt/oracle/product/11.2.0/dbhome_1/precomp/public -I/srv/develop/BOAL/mico-2.3.12/include -I/srv/develop/BOAL/mico-2.3.12/include/mico -I/usr/include/c++/4.1.2 -L/usr/local/lib programm44.cpp -o programm44.o
    

    Und das kommt dabei heraus (nur ein Ausschnitt):

    /srv/develop/BOAL/mico-2.3.12/include/mico/string.h:49: error: expected ‘;’ before ‘operator’
    /srv/develop/BOAL/mico-2.3.12/include/mico/string.h:71: error: declaration of ‘operator[]’ as non-function
    /srv/develop/BOAL/mico-2.3.12/include/mico/string.h:71: error: expected ‘;’ before ‘(’ token
    /srv/develop/BOAL/mico-2.3.12/include/mico/string.h:74: error: expected `;' before ‘char’
    /srv/develop/BOAL/mico-2.3.12/include/mico/string.h:74: error: ‘ULong’ has not been declared
    /srv/develop/BOAL/mico-2.3.12/include/mico/string.h:116: error: ‘ULong’ was not declared in this scope
    /srv/develop/BOAL/mico-2.3.12/include/mico/string.h:118: error: ‘ULong’ has not been declared
    /srv/develop/BOAL/mico-2.3.12/include/mico/string.h:141: error: expected ‘;’ before ‘operator’
    /srv/develop/BOAL/mico-2.3.12/include/mico/string.h:162: error: declaration of ‘operator[]’ as non-function
    /srv/develop/BOAL/mico-2.3.12/include/mico/string.h:162: error: expected ‘;’ before ‘(’ token
    /srv/develop/BOAL/mico-2.3.12/include/mico/string.h:165: error: expected `;' before ‘wchar_t’
    /srv/develop/BOAL/mico-2.3.12/include/mico/string.h:165: error: ‘ULong’ has not been declared
    /srv/develop/BOAL/mico-2.3.12/include/mico/string.h:207: error: ‘ULong’ was not declared in this scope
    /srv/develop/BOAL/mico-2.3.12/include/mico/string.h:209: error: ‘ULong’ has not been declared
    /usr/include/c++/4.1.2/cstring:80: error: ‘::memcpy’ has not been declared
    /usr/include/c++/4.1.2/cstring:81: error: ‘::memmove’ has not been declared
    /usr/include/c++/4.1.2/cstring:82: error: ‘::strcpy’ has not been declared
    /usr/include/c++/4.1.2/cstring:83: error: ‘::strncpy’ has not been declared
    
    [...]
    

    Ich denke mal, es ist recht unwahrscheinlich, dass in den Header-Dateien selbst etwas syntaktisch falsch ist ("expected ‘;’ before ‘operator’").
    Obwohl ich der Meinung bin, dass der Compiler-Aufruf alles abdecken sollte, scheint hier doch wohl noch irgendetwas zu fehlen.
    Nur im Moment sehe ich den Wald vor lauter Bäumen nicht... 😕

    Kann mir jemand einen Tipp geben, wie ich dem Fehler am besten auf die Spur komme?

    Vielen Dank im voraus!



  • Ich denke, dir fehlen lediglich ein paar Includes. Schau zum Beispiel in Zeile 49 der string.h, welchen Rückgabetyp der Operator hat und binde den entsprechenden Header explizit ein. Oder dir fehlen ein paar typename s...



  • Ich hoffe, ich verstehe Dich jetzt richtig.

    Zeile 49 sieht z.B. wie folgt aus.

    48	    // begin-mico-extension
        49	    Boolean operator== (const String_var &s) const;
        50	    // end-mico-extension
    

    Ich kann mir nicht vorstellen, dass im Quellcode noch irgendwelche #includes fehlen, da dieses Programm seinerzeit ja bereits erfolgreich in diese Form kompiliert wurde.
    Oder meinst Du die Includes beim Compiler-Aufruf?


  • Mod

    Was ist denn beispielsweise ein Boolean? Ist das wo das definiert wird auch eingebunden?



  • Das ist es ja gerade, das mich verzweifeln lässt.
    Ich habe im Moment echt keinen Schimmer, was ich noch wo einbinden könnte.
    Hier das Ganze nochmal ganz von Anfang an, wenn das hilft?

    1	// -*- c++ -*-
         2	/*
         3	 *  MICO --- an Open Source CORBA implementation
         4	 *  Copyright (c) 1997-2001 by The Mico Team
         5	 *
         6	 *  This library is free software; you can redistribute it and/or
         7	 *  modify it under the terms of the GNU Library General Public
         8	 *  License as published by the Free Software Foundation; either
         9	 *  version 2 of the License, or (at your option) any later version.
        10	 *
        11	 *  This library is distributed in the hope that it will be useful,
        12	 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
        13	 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
        14	 *  Library General Public License for more details.
        15	 *
        16	 *  You should have received a copy of the GNU Library General Public
        17	 *  License along with this library; if not, write to the Free
        18	 *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
        19	 *
        20	 *  For more information, visit the MICO Home Page at
        21	 *  http://www.mico.org/
        22	 */
        23	
        24	#ifndef __mico_string_h__
        25	#define __mico_string_h__
        26	
        27	namespace CORBA {
        28	
        29	class String_out;
        30	
        31	class String_var {
        32	
        33	    friend class String_out;
        34	    
        35	private:
        36	    char* _str;
        37	    
        38	public:
        39	    String_var ();
        40	    String_var (char *);
        41	    String_var (const char *);
        42	    String_var (const String_var &);
        43	    ~String_var ();
        44	
        45	    String_var &operator= (char *);
        46	    String_var &operator= (const char *);
        47	    String_var &operator= (const String_var &);
        48	    // begin-mico-extension
        49	    Boolean operator== (const String_var &s) const;
        50	    // end-mico-extension
        51	
        52	    // g++ const overload problem
        53	#ifdef HAVE_CONST_OVERLOAD
        54	    operator const char* () const
        55	    {
        56	        return _str;
        57	    }
        58	
        59	    operator char* ()
        60	    {
        61	        return _str;
        62	    }
        63	
        64	#else // HAVE_CONST_OVERLOAD
        65	    operator char* () const
        66	    {
        67	        return _str;
        68	    }
        69	#endif // HAVE_CONST_OVERLOAD
    


  • Boolean ist nicht deklariert. Entweder den entsprechenden Header inkludieren oder ne Vorwärtsdeklaration machen.



  • den entsprechenden Header inkludieren

    Genau das ist es ja. Wenn ich es richtig sehe, HABE ich ja alles nötige inkludiert (s.u).

    Das Hauptprogramm inkludiert die CORBA.h:

    Programm.cpp:
    
    #include <iostream>
    using namespace std;
    #include <CORBA.h>	<- !!!
    #include <ifroot.h>
    #include <ifdatabase.h>
    #include <ifaccountingunitfactory.h>
    #include <ifaccountingunit.h>
    [...]
    

    Die CORBA.h inkludiert die mico/string.h aus dem darunter liegenden Verzeichnis 'mico':

    /home/develop/BOAL/mico-2.3.12/include/CORBA.h:
    
    #include <mico/basic.h>
    #include <mico/magic.h>
    #include <mico/address.h>
    #include <mico/string.h>	<- !!!
    #include <mico/tcconst.h>
    [...]
    

    Hier der Auschnitt der den ersten Fehler beim kompilieren produziert:

    /home/develop/BOAL/mico-2.3.12/include/mico/string.h:
    
    public:
        String_var ();
        String_var (char *);
        String_var (const char *);
        String_var (const String_var &);
        ~String_var ();
    
        String_var &operator= (char *);
        String_var &operator= (const char *);
        String_var &operator= (const String_var &);
        // begin-mico-extension
        Boolean operator== (const String_var &s) const;	<- !!!
        // end-mico-extension
    

    Der Fehler:

    mico/string.h:49: error: expected ‘;’ before ‘operator’
    

    Also sollte doch mit der Compiler-Anweisung

    g++ -o Progamm -I/home/develop/BOAL/mico-2.3.12/include Programm.cpp
    

    alles abgedeckt sein, oder nicht?

    Wie gesagt: Ich hab' echt keine Ahnung, was hier noch fehlen könnte, bzw. wie ich herausfinden kann, was fehlt?! 😕



  • Hast du mal im Projekt nach ner Definition gesucht (wirklich mit der Textsuchfunktion)? Was inkludieren mico/basic.h, mico/magic.h, mico/address.h und vor allem mico/string.h?


Anmelden zum Antworten