error C4430: missing type specifier - int assumed
-
Hallo,
bin gerade dabei eine eine Aufgabe bezüglich Vererbung für die FH zu lösen.
Es sollen 3 Klassen erstellt werden: Person, Angestellter und Manager.
Person ist die Basisklasse, Angestellter erbt von Person und Manager erbt von Angestellter.Die Klassendeklarationen hab ich fertiggestellt, doch beim einbinden der Headerdateien in die cpp Dateien bekommen ich einige Fehlermeldungen.
Hier mal der Code:
Person.h
#ifndef _PERSON_H #define _PERSON_H #include <string> class Person { protected: string name; string vorname; string strasse; string hausnummer; string plz; string ort; public: void printCard() const; }; #endif //_PERSON_HPerson.cpp
#include "stdafx.h" #include "Person.h"Angestellter.h
#ifndef _ANGESTELLTER_H #define _ANGESTELLTER_H #include "Person.h" #include <string> class Angestellter : public Person { protected: string position; public: void printCard() const; }; #endif //_ANGESTELLTER_HAngestellter.cpp
#include "stdafx.h" #include "Angestellter.h"Manager.h
#ifndef _MANAGER_H #define _MANAGER_H #include "Angestellter.h" #include <string> class Manager : public Angestellter { private: string aufgabenbereich; public: void printCard() const; }; #endif //_MANAGER_HManager.cpp
#include "stdafx.h" #include "Manager.h"Die Fehlermeldungen lauten wie folgt:
1>person.h(8) : error C2146: syntax error : missing ';' before identifier 'name' 1>person.h(8) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>person.h(8) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>person.h(9) : error C2146: syntax error : missing ';' before identifier 'vorname' 1>person.h(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>person.h(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>person.h(10) : error C2146: syntax error : missing ';' before identifier 'strasse' 1>person.h(10) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>person.h(10) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>person.h(11) : error C2146: syntax error : missing ';' before identifier 'hausnummer' 1>person.h(11) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>person.h(11) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>person.h(12) : error C2146: syntax error : missing ';' before identifier 'plz' 1>person.h(12) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>person.h(12) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>person.h(13) : error C2146: syntax error : missing ';' before identifier 'ort' 1>person.h(13) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>person.h(13) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>angestellter.h(9) : error C2146: syntax error : missing ';' before identifier 'position' 1>angestellter.h(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>angestellter.h(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>manager.h(9) : error C2146: syntax error : missing ';' before identifier 'aufgabenbereich' 1>manager.h(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>manager.h(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-intWie ihr sehen könnt wiederholen sich die Fehler zyklisch für alle Membervariablen. Hab zu dem Thema bereits einiges im Internet gesucht, bin aber leider nicht auf eine Lösung für mein spezifisches Problem gestoßen.
Der Fehler taucht übrigens nicht mehr auf, sobald ich die Headerinkludierungen aus den cpp Dateien rausnehme. Es spielt dabei keine Rolle in wievielen cpp Dateien die Header eingebunden wurden, eine reicht schon aus um für die jeweilige Klasse die Fehlermeldungen zu reproduzieren.
Der Fehler könnte auf nicht korrekte Headerinkludierung hinweisen, da der Compiler eine nicht vorhandene Typspezifizierung bemängelt, so als ob ich den Header der Klasse String nicht eingebunden hätte. Was an meinen Inkludierungen allerdings falsch sein soll ist mir rätselhaft, zumal ich schon öfters Klassen auf Dateien mit dieser Art und Weise aufgeteilt habe.
Ich hoffe jemand kann mir für diesen Fehler eine Erklärung geben.
Gruß,
NeoGreen
-
du hast den namespace vergessen
entweder std::string oder using namespace std
-
Danke, das wars. *Schäm*
Solche Flüchtigkeits - bzw. Unaufmerksamskeitsfehler sind echt demotivierend. Sowas darf eigentlich nicht passieren, aber ich denke nochmal wird es auch bestimmt nicht.
-
NeoGreen schrieb:
Danke, das wars. *Schäm*
Solche Flüchtigkeits - bzw. Unaufmerksamskeitsfehler sind echt demotivierend. Sowas darf eigentlich nicht passieren, aber ich denke nochmal wird es auch bestimmt nicht.
Naja. Den Fehler wirst du BESTIMMT noch einmal machen.

Aber das nächste mal weisst du, wenn du die Fehlermeldungen anschaust, wo du suchen musst und ev. wo dein Fehler liegen könnte.
-
std schrieb:
du hast den namespace vergessen
entweder std::string oder using namespace std
Arrrgh! NIE 'using namespace' in einem Header!
-
Konrad Rudolph schrieb:
Arrrgh! NIE 'using namespace' in einem Header!
Was können da für Probleme auftreten?
-
NeoGreen schrieb:
Konrad Rudolph schrieb:
Arrrgh! NIE 'using namespace' in einem Header!
Was können da für Probleme auftreten?
Der Header wird in (mehreren!) cpp-Dateien eingebunden, und auch dort wirst Du zwangsläufig Namen einführen. Da kann es natürlich zu Namenskonflikten kommen. Namensbereiche verhindern diese Namenskonflikte, da die Namen eben in unterschiedlichen Gültigkeitsbereichen deklariert wurden.
Wenn Du hingegen einen Namen in den aktuellen Namensbereich einbindest (und genau das macht 'using namespace'), dann kannst Du ihn nicht mehr neudeklarieren. Punkt. Es gibt auch kein Workaround. Der einzige Weg ist es, einen der beiden Namen umzubenennen. Das ist natürlich aber nicht möglich, wenn beide Namen aus unterschiedlichen Headern kommen, die beide den Fehler begangen haben, 'using namespace' zu verwenden.
-
Das klingt einleuchtend, danke für die Erklärung.
-
Ich bin auch gerade auf dieses Problem gestoßen.
Ich wollte in einer Klasse folgendes Objekt anlegen:private: COleDateTime zeit;Es kam derselbe Fehler wie oben genannt.
COleDateTime benötigt den Header "ATLComTime.h". Dieser war bereits in der "stdafx.h" inkludiert, da ich vorkompillierte Header verwende.Ich muss diesen Header jedoch erneut inkludieren, damit dieser Fehler nicht auftritt. Wieso? Durch "stdafx.h" sollte er ja zur Verfügung stehen.
Vielen Dank für eure Antworten.