Eigene Mini-Klasse liefert seltsame Fehlermeldung
-
Ich habe nun alle kleineren Funktionen aus meinem Projekt in eine eigene Klasse geschrieben, damit ich von überall her Zugriff auf sie habe. So sieht der Header aus:
class StdTools { public: // standard constructor StdTools(); // wait for <sec> seconds void StdTools::wait(double sec); // convert long to string string StdTools::LongToString(unsigned long value); <---- Error // convert *long to string string StdTools::LongToString(unsigned long *value); // text out message with integer void StdTools::TxtOut(int x); // text out message with string void StdTools::TxtOut(string x); private: };In der markierten Zeile bringt er nun einige Meldungen, die ich nicht verstehe:
d:\c++ projekte\pmd toolbox newkernel\stdtools.h(23) : error C2146: syntax error : missing ';' before identifier 'LongToString'
d:\c++ projekte\pmd toolbox newkernel\stdtools.h(23) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
d:\c++ projekte\pmd toolbox newkernel\stdtools.h(23) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
d:\c++ projekte\pmd toolbox newkernel\stdtools.h(23) : warning C4183: 'LongToString': missing return type; assumed to be a member function returning 'int'Was ist da los?
-
#include <string> und std:: davor fehlt, würde ich sagen.
-
du befindest dich bereits im "namensraum" der klasse "StdTools" und brauchst (besser gesagt: darfst) somit nicht die klasse angeben.
richtig wäre:class blub { private: string meineFunktion(long nummer); }; //Zur Definition der Funktion dann den Auflösungsoperator(::) mit dem Klassennamen benutzen string blub::meineFunktion(long nummer) { return nummer*5; }
-
@MFK: Bringt nichts, wenn ich std:: davorschreibe kennt er "string" überhaupt nicht mehr, auch mit dem include.
@helf0r: Danke für den Tip, aber er sagt immernoch, dass da ein Semikolon fehlen würde, aber das verstehe ich nicht.
-
JPSelter schrieb:
@MFK: Bringt nichts, wenn ich std:: davorschreibe kennt er "string" überhaupt nicht mehr, auch mit dem include.
Was genau heißt denn "kennt er überhaupt nicht mehr"? Fehlermeldung?
-
Ausserdem sollten die Memberfunktionen static sein.
-
Dann hatte ich es eben nicht richtig included, vielleicht Gross-/Kleinschreibung... jetzt gehts. Wundert mich nur, dass ich jetzt std::string schreiben muss, musste ich vorher nicht, wo das ganze noch in einer anderen Klasse stand. OK, geht ja nun, danke!
-
JPSelter schrieb:
Wundert mich nur, dass ich jetzt std::string schreiben muss, musste ich vorher nicht, wo das ganze noch in einer anderen Klasse stand.
Da gab es dann vermutlich eine using-Direktive oder using-Deklaration. Sollte man aber in Headerdateien nicht machen.
-
Eine weitere Frage: Ich bekomme meine Klasse nun in der Hauptklasse nicht ans Laufen. In MainDlg.h definiere ich im private-Teil
StdTools mytools;
Dann sagt er mir, dass hinter StdTools malwieder ein Semikolon fehlt. Inzwischen weiss ich, dass ich das lösen kann, indem ich in MainDlg.cpp meine Klasse VOR MainDlg.h include. Meistens klappt das auch, aber diesmal nicht. Wenn ich also
#include StdTools.h
#include MainDlg.hhabe, dann sollte doch alles aus StdTools.h auch in MainDlg.h bekannt sein oder? Wenn ich StdTools.h direkt in MainDlg.h reinpacke bekomme ich einen class redifinition error...
-
JPSelter schrieb:
Wenn ich StdTools.h direkt in MainDlg.h reinpacke bekomme ich einen class redifinition error...
Includewächter vergessen?
-
Was ist das denn? Ich arbeite mit VS noch nicht so lange.
-
Ah ok, habs gesehen und habe diese AFX Messages am Anfang und Ende eingefügt, jetzt gehts. Abschlussfrage (will dazu kein extra Topic eröffnen): Was ist der Unterschied zwischen "Build Solution" und "Build MyApp" im VS2005?