Forum: Compiler & IDEs Compilererror "is not a type"


von G++ (Gast)


Angehängte Dateien:

Lesenswert?

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.

---

von Clemens L. (c_l)


Lesenswert?

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
}

von G++ (Gast)


Lesenswert?

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 :(

von G++ (Gast)


Lesenswert?

Vielen Dank !

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.