Hallo, ich versuche meinen Fehler zu finden. Dazu habe ich den Fehler im Anhang "Nachprogrammiert". In einem Header habe ich eine Klasse(bad) und eine Konstante (BadTestConst). Die Konstante möchte ich zum Initialisieren des Konstruktors benutzen. Die Konstante ist global sichtbar. Mache ich das in der Main funktioniert das auch. Nur ich einer weiteren Klasse (subBad in main.cpp) funktioniert das nicht. In subBad versuche ich eine Aggregation der Klasse bad zu machen. Leider verstehe ich in dem Zusammenhang den Fehler nicht. Was mache ich falsch ? -- avr-g++ -Wall -g2 -gstabs -O0 -fpack-struct -fshort-enums -funsigned-char -funsigned-bitfields -fno-exceptions -mmcu=atmega16 -DF_CPU=1000000UL -MMD -MP -MF"src/main.d" -MT"src/main.d" -c -o "src/main.o" "../src/main.cpp" ../src/main.cpp:22:22: error: ‘BadTestConst’ is not a type bad insideLittleBad(BadTestConst); ^ ../src/main.cpp:24:29: error: ‘anotherConst’ is not a type bad insideAnotherLittleBad(anotherConst); ^ src/subdir.mk:21: recipe for target 'src/main.o' failed ../src/main.cpp: In constructor ‘subBad::subBad()’: ../src/main.cpp:31:17: error: ‘((subBad*)this)->subBad::insideLittleBad’ does not have class type insideLittleBad.set(); ^ ../src/main.cpp:32:24: error: ‘((subBad*)this)->subBad::insideAnotherLittleBad’ does not have class type insideAnotherLittleBad.set(); ^ make: *** [src/main.o] Error 1 07:46:34 Build Finished (took 61ms) -- s@myshell:~$ apt-cache show gcc-avr Package: gcc-avr Version: 1:4.8.1+Atmel3.4.5-1 Installed-Size: 52911 Maintainer: Hakan Ardo <hakan@debian.org> Architecture: amd64 Provides: c-compiler-avr Depends: libc6 (>= 2.14), libgmp10, libmpc3, libmpfr4 (>= 3.1.2), zlib1g (>= 1:1.1.4), binutils-avr (>= 2.24+Atmel3.4.4) Suggests: task-c-devel, gcc-doc (>= 4:4.8), gcc (>= 4:4.8), avr-libc (>= 1:1.8.0-4) Conflicts: avr-libc (<= 1:1.7.1-2) Description-en: GNU C compiler (cross compiler for avr) This is the GNU C compiler, a fairly portable optimizing compiler which supports multiple languages. This package includes support for C. Description-md5: 4f2d9a1e3db47f1ff1dc62bc336adcec Tag: devel::compiler, devel::lang:c, implemented-in::c, interface::commandline, role::program, scope::utility, suite::gnu, works-with::software:source Section: devel Priority: extra Filename: pool/main/g/gcc-avr/gcc-avr_4.8.1+Atmel3.4.5-1_amd64.deb Size: 11387244 MD5sum: be3adf6f47c0ff643ce168fe61a881b0 SHA1: 5d4bf11fa031e19cdd0659d52dc8bb5b46c17db4 SHA256: e8b30da59d19121a145b0c8f6768fe0cccb1745cdc547b366b648de99a22ff39 s@myshell:~$ avr-gcc --version avr-gcc (GCC) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ---
1 | bad insideLittleBad(BadTestConst); |
Dies deklariert eine Funktion, die ein Object vom Type "bad" zurückgibt und einen Parameter vom Typ "BadTestConst" hat. Der Konstruktor eines Klassenelements muss im Konstruktor der es enthaltenden Klasse aufgerufen werden:
1 | subBad::subBad(): |
2 | insideLittleBad(BadTestConst), |
3 | insideAnotherLittleBad(anotherConst) |
4 | {
|
5 | // ...
|
6 | }
|
Durch Deine Erklärung wird es klar ! Natürlich blöd das ich denke das die Instanziierung einer Klasse im Funktionsblock (hier main) nicht gleich in einer Klasse ist. Schande über mich! So kann es einem gehen wenn man mit etwas neuem Anfängt :(
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.