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


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


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)


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
1
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)


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)


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)


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)


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)


Lesenswert?


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


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.