Ärger mit Instanzen
-
HAllo,
ich habe ein Problem mit einer Instanz. Zuvor will ich sagen, dass ich mit Microsoft Visual Studio 2003.net programmiere. Es handelt sich dabei um folgendes Programm:
Außerdem habe ich gelesen dass man seine Programmierkenntisse angeben soll: C gut, C++ eher schlecht bzw. Anfänger.class CMenue { public: //---Variable float values[1025]; // Ausgelesen Messeergebnisse char fileData[1056][50]; // Rohe Daten des Files char cleanCharValues[1025][36]; // Nur notwendige Parameter als Characters char *ptr1; // Zeiger auf Dateipfad Frequenzgang char *ptr2; // Zeiger auf Dateipfad Phasengang CValues inst; void menue (void); // Programm Menueführung };Wenn ich die Instanz "inst" anlegen will, dann bekomme ich folgende 3 Fehlermeldungen:
error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'cvalues'
error C2501: 'CMenue::cvalues': Fehlende Speicherklasse oder Typspezifizierer
error C2501: 'CMenue::CValues': Fehlende Speicherklasse oder TypspezifiziererWarum kommen diese Fehlermeldungen? Ich habe mich vergewissert, dass ich die Klasse richtig geschrieben habe und diese auch existieren. Auch beim Schreiben eines Aufruf einer Methode der Klasse CValues gibt Visual Studio mir alle Methoden zur Verfügung. Nur beim kompelieren kommen dann diese Fehlermeldungen.
Genauso wie in der Klasse CMenue lege ich noch in einer anderen Klasse von der Klasse CValues eine Instanz an, mit dem Unterschied dass es funktioniert.
Soviel steht der MSDN Hilfe zu den Fehlern:
[Compiler Error C2146]
Syntaxfehler: Fehlendes "Token" vor Bezeichner "Bezeichner"
Der Compiler hat ein Token erwartet, stattdessen aber einen Bezeichner gefunden.
Mögliche Ursache
Ein Schreibfehler. Der Fehler C2065 geht diesem Fehler normalerweise voraus.
Im folgenden Beispiel wird C2146 erzeugt:// C2146.cpp
int main()
{
intt x; // C2146 : missing semicolon before 'x'
}
Dieser Fehler kann auch aufgrund einer Verbesserung der Compilerkonformität in Visual Studio .NET 2003 ausgegeben werden: explizite Spezialisierungen finden nicht länger Vorlagenparameter aus der primären Vorlage.Die Verwendung von T aus der primären Vorlage ist in der expliziten Spezialisierung nicht zulässig. In Code, der in der Visual Studio .NET 2003-Version und der Visual Studio .NET-Version von Visual C++ gültig sein soll, ersetzen Sie alle Instanzen des Vorlagenparameters in der Spezialisierung durch den explizit spezialisierten Typ.
Weitere Informationen finden Sie unter Übersicht über die wichtigsten Änderungen bei der Kompilierzeit.
Der folgende Beispielcode wird in Visual Studio .NET kompiliert, verursacht in Visual Studio .NET 2003 jedoch einen Fehler:
// C2146b.cpp
// compile with: /LD
template <class T>
struct S;template <>
struct S<int>
{
T m_t; // C2146
// Try the following line instead:
// int m_t;
};[Compiler Error C2501]
"Bezeichner": Fehlende Speicherklasse oder Typspezifizierer
Der Bezeichner wurde ohne Angabe seines Typs deklariert.
Mögliche Ursachen
Schreibfehler oder falsche Groß-/Kleinschreibung.
Fehlender Typspezifizierer in der Deklaration des Bezeichners.
Beispiel
// C2501.cpp
// Header file for the CUndeclared has been omitted:
class CMyClass {
private:
CUndeclared m_myClass; // C2501: Class unknown
} ;Danke schon einmal im Vorraus
PS: Vielleicht habe blöd ausgedrückt, wie heißt es: Instanz anlegen, deklarieren, benennen,...? Vielleicht weiß es einer von euch besser.
-
Du mußt natürlich den Header einfügen, wo 'CValues' deklariert ist.
#include "values.h" // <- wie auch immer deine Datei heißtC gut, C++ eher schlecht bzw. Anfänger.
Das funktioniert aber auch in C schon so, also bist du auch in C ein Anfänger -)
P.S. du solltest deine Variablendeklarationen noch mal überdenken:
in C++ gibt es std::string und std::vector und die Variablen sollten private sein...
-
alle files sind included.....das ist nicht das Problem!
C immer nocht gut...c++ schlecht
-
zeig mal die gesamte DMenue und CValue Headerdatei
-
gramboler schrieb:
CValues inst;
...
error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'cvalues'ganz direkt gefragt: stimmen Groß/Kleinschreibung konsequent überein