Forum: Compiler & IDEs gcc4.0 base 'HelperServerBase' with only non-default constructor in class without a constructor


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von сорок две (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe keine Ahnung von C++ versuche hier für Jemanden die Kastanien 
aus dem Feuer zu holen in dem ich auf einem uralten BSD System versuche 
einen neueren Squid Proxy zu bauen. Mir schlagen aber das alte OS und 
die dafür verfügbaren Tools ins Genick.

Ich habe hier die Quellen eines squid-3.5.28 auf einem FreeBSD 4.11 am 
Wickel und laufe auf folgendes Problem auf:

../../src/helper.h:134: error: base 'HelperServerBase' with only 
non-default constructor in class without a constructor

Das ist Zeile 133 von helper.h:

class helper_server : public HelperServerBase
{
public:
    MemBuf *wqueue;
    MemBuf *writebuf;

    helper *parent;
    Helper::Request **requests;

private:
    CBDATA_CLASS2(helper_server);
};

class helper_stateful_server : public HelperServerBase
{
public:
    /* MemBuf wqueue; */
    /* MemBuf writebuf; */

    statefulhelper *parent;
    Helper::Request *request;

    void *data;         /* State data used by the calling routines */

private:
    CBDATA_CLASS2(helper_stateful_server);
};

Der Bug ist im Netz bekannt, zu lesen gibts dazu das squid 3.x einen 
gcc4.x zum übersetzen erfordert, ich benutze hier gcc4.0 ..einen neueren 
gibt es nicht für FreeBSD4.11 ..jedenfalls nicht als package zum 
Download. Ich weiß das sich das mit einem gcc4.9 übersetzen läßt..mir 
hilft nur leider diese Information überhaupt nicht..weil eben kein 
neuerer Compiler verfügbar ist.

Kann Jemand die Definition von HelperServerBase so ändern, das es der 
alte compiler hoffentlich löffelt?

Vielen Dank im Vorraus..

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Ich hab mal kurz reingeschaut.
HelperServerBase hat überhaupt keine selbstdefinierten Konstruktoren, 
also müsste es da einen default-Konstruktor geben. Keine Ahnung, ob das 
ein bug in gcc 4.0 ist.

Probier mal, in HelperServerBase den default-Konstruktor selber 
hinzuzufügen:
Ein
HelperServerBase (){}
nach dem public: in Zeile 96 einfügen.

Einfacher wäre es allerdings, du besorst dir einen aktuelleren gcc. Das 
sollte doch möglich sein.

Oliver

: Bearbeitet durch User
von сорок две (Gast)


Bewertung
0 lesenswert
nicht lesenswert
...wieso Zeile 96? das von mir gequotete fängt in Zeile 133 an, die 
Fehlermeldung erzählt was von 134.. sorry, ich habe wirklich keinen Plan 
davon.

..und Nein..es ist eben nicht möglich mit neuerem gcc, das System ist 
uralt, kommt mit gcc-2.95 als Standardcompiler im System, der gcc-4.0 
ist das Neueste das zu finden war um es zusätzlich zu installieren.

von сорок две (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ok Oliver, Du hast Dich einfach mehr gekümmert als ich dachte :-)

Ich habs getan und den Compiler angeworfen..dauert noch..

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
сорок две schrieb:
> ...wieso Zeile 96?

Weil die Fehlemeldung sagt, daß der Konstruktor in der Basisklasse 
fehlt, und die steht halt weiter vorne.

Ich bleib aber bei der Aussage: Besorg dir eine neueren Compiler. Denn 
ich wette, daß aktuelle Problem mit dem gcc 4.0 wird nicht das einzige 
sein.

Oliver

von сорок две (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Du kannst da nicht mit mir wetten..weil ich der selben Meinung bin, ich 
habe nur die vorhergehenden Probleme erfolgreich vertreiben können.

Jetzt knallt es wieder:
depbase=`echo Reply.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`; /bin/sh 
../../libtool  --tag=CXX    --mode=compile /usr/local/bin/c++40 
-DHAVE_CONFIG_H    -I../.. -I../../include  -I../../lib -I../../src 
-I../../include       -Wall -Wpointer-arith -Wwrite-strings -Wcomments 
-Wshadow -Woverloaded-virtual -Werror -pipe -D_REENTRANT -g -O2 
-I/usr/local/include -MT Reply.lo -MD -MP -MF $depbase.Tpo -c -o 
Reply.lo Reply.cc && mv -f $depbase.Tpo $depbase.Plo
libtool: compile:  /usr/local/bin/c++40 -DHAVE_CONFIG_H -I../.. 
-I../../include -I../../lib -I../../src -I../../include -Wall 
-Wpointer-arith -Wwrite-strings -Wcomments -Wshadow -Woverloaded-virtual 
-Werror -pipe -D_REENTRANT -g -O2 -I/usr/local/include -MT Reply.lo -MD 
-MP -MF .deps/Reply.Tpo -c Reply.cc -o Reply.o
../../src/base/RefCount.h: In member function 'void 
RefCount<C>::dereference(const C*) [with C = Comm::Connection]':
../../src/base/RefCount.h:35:   instantiated from 
'RefCount<C>::~RefCount() [with C = Comm::Connection]'
../../src/helper.h:96:   instantiated from here
../../src/base/RefCount.h:76: error: invalid use of undefined type 
'const struct Comm::Connection'
../../src/comm/forward.h:20: error: forward declaration of 'const struct 
Comm::Connection'
cc1plus: warnings being treated as errors
../../src/base/RefCount.h:77: warning: possible problem detected in 
invocation of delete operator:
../../src/base/RefCount.h:73: warning: 'tempP_' has incomplete type
../../src/comm/forward.h:20: warning: forward declaration of 'struct 
Comm::Connection'
../../src/base/RefCount.h:77: note: neither the destructor nor the 
class-specific operator delete will be called, even if they are declared 
when the class is defined.
*** Error code 1
..hat nicht viel Sinn. Ich werde versuchen den wirklich allerletzten 
möglichen Compiler auf dem Uropa-System zu bauen, das ist 4.3 aus den 
Ports. Wenn es dann nicht geht, gibts wohl simpel keine Lösung für das 
Problem.
Ich melde mich..das wird ne Weile dauern.

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert

von сорок две (Gast)


Bewertung
0 lesenswert
nicht lesenswert
..danke ..das lese ich garantiert noch durch. Momentan fehlt mir 
allerdings etwas die Muße dazu.

FreeBSD 4.11 war ein sehr gutes System, danach fing der Ärger an. IMHO 
ist das auch der Auskopplungspunkt von DragonFlyBSD, Matt Dillon hatte 
sich danach von FreeBSD getrennt.

Gruß,
Holm

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.