OOP: es fehlt...
-
Hallo
ich möchte mir selber eine klasse bauen um ID3 Tags auszulesen nun wirft mir aber mein Compiler schon eiinen Fehler entgegen den ich einfach nciht nachvolziehen kann.
#ifndef ID3V1_H #define ID3V1_H typedef unsigned char BYTE; struct Tag{ BYTE tag[3]; BYTE title[30]; BYTE artist[30]; BYTE album[30]; BYTE year[4]; BYTE comment[30]; BYTE titlenr[1]; BYTE genre[1]; }; class ID3v1 { private: string subVer; Tag tag; void setVersion(string); void setTag(Tag); public: int _readFile(MP3File test); //Angeblich hier string getVersion(); Tag getTag(); ID3v1(); ~ID3v1(); }; #endif //ID3V1_HFehlermeldung:
6 E:\AE\CPP\BEG Song DB\ID3Reader\ID3Reader\MP3File.h:4, from TestMain.cpp In file included from ID3Reader/MP3File.h:4,
27 E:\AE\CPP\BEG Song DB\ID3Reader\ID3Reader\ID3v1\ID3v1.h expected `;' before '(' token
Währe sehr dankbar wenn mir jemand helfen könnte.
MFG Kollode
-
Hallo
Vermutlich ist an der besagten Stelle der typ MP3File unbekannt.
Include vergessen?bis bald
akari
-
Hatte ich auch schon aber der Fehler bleibt.
MFG Kollode
-
Und es ist wirklich der einzige Fehler, den der Compiler meldet?
Ist std::string in dem Kontext bekannt?Ansonsten könntest du mal den Namen der Funktion _readFile ändern. Bezeichner mit einem führenden Unterstrich sind mir immer suspekt, da die teilweise reserviert sind. Würde mich nicht wundern, wenn irgendwo ein Makro namens _readFile existiert, was dir an der Stelle natürlich dann den Code zerstört.
-
Der name der Methode wurde schon ein paarmal geändert bringt nichts, an std::string scheint es auch nicht zu liegen.
Ich versuch gleich mal das das gesamte Projekt (Dev-Cpp) hochzuladen ncoh ist ja nciht viel vorhanden.
MFG Kollode
-
Hallo
Na ich glaub es ist besser wenn du selber suchst. Kommentier mal Schritt für Schritt Zeilen aus um die eigentliche Fehlerquelle zu finden.
bis bald
akari
-
Der Meister schrieb:
Ansonsten könntest du mal den Namen der Funktion _readFile ändern. Bezeichner mit einem führenden Unterstrich sind mir immer suspekt, da die teilweise reserviert sind.
aber nicht immer: namen mit doppeltem unterstrich und unterstrich von einem großbuchstaben gefolgt immer, aber:
17.4.3.1.2 2.fall:C++ Standard schrieb:
— Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace
aber als faustregel fährt man ganz gut mit "keinen unterstrich am anfang"
@OP:
ein konstrukt wie#include <...> using namespace std; #include "foo.h"ist *nicht* zu empfehlen.
inkludiere in deinen headern die dateien, die du brauchst und vermeide in (und vor inkludierten) headern die using direktive. womöglich liegt das problem daran.
-
Also ich hab mir das Projekt jetzt mal schnell angeschaut.
Was mir als erstes auffällt, ist, dass du <string> nicht includest, aber in beiden Headern "string" als Rückgabewert nutzt (da fehlt auch noch std:: ;))
Außerdem includieren (richtig geschrieben?!?) die beiden headern gegenseitig, so dass wohl MP3File.h in ID3v1.h includiert wird, so kann MP3File.h die Klasse ja garnicht kennen.
Vielleicht ist es einfach ein Denkfehler, oder es ist ein falsch (garnicht?) geplantes Projekt, solch ein gegenseitig-includieren sollte nicht sein.