Function returns Function... kann man sich dagegen wehren?
-
Aus irgendeinem Grund unterstellt mir g++, dass ich mit static Log* getLog(); eine Funktion deklariere, die eine Funktion zurückgibt. Wisst ihr warum?
#ifndef LOG_H_
#define LOG_H_#include <string>
#include <fstream>#define getLog Log::getLog()
#define DEFAULT_FL __file__, __line__using namespace std;
class Log {
private:Log(const char*);
Log(Log&);
virtual ~Log();static Log* m_plog;
ofstream* m_plogfile;static const short newline_char;
static const char* newline;public:
static void destroy();
static Log* getLog(); //<---- HIER IST DER FEHLERtypedef int logLevel_t;
enum {DETAIL, WARNING, ERROR, CRITICAL};
void write(logLevel_t, string&, unsigned, const char*);};
#endif /*LOG_H_*/
-
Könntet ihr auch bitte schreiben, wenn ihr keine Antwort kennt? Dann würde ich das als Bug reporten. Danke

(Sorry wegen dem Doppelpost)
-
Das liegt an deinem define. Nach dem Präprozessor sieht die Funktionsdeklaration nämlich so aus:
static Log* Log::getLog()();Der Sinn deines defines erschließt sich mir allerdings nicht ganz.
-
Ach natürlich!!!
Danke =)... tut mir leid, irgendwie sieht man selber sowas nicht... 
Ich wollte mir damit das lästige Log::getLog() ersparen und einfach nur noch getLog-> schreiben müssen... aber in Zukunft: Finger weg von defines wenn es nicht 100%ig Sinn macht

-
Du kannst ja getLog außerhalb von der Klasse definieren und zum Freund der Klasse machen.
-
Also wenn du class das singleton machst, as ist sinnvol, zeitweilig Variable zu erklaren:
Log* log = Log::getLog(); log->someMethod(); log->otherMethod();Wenn class ist wesentlich statish ist, erklarst alle Functionen als statish, aber solchen Entscheidungen voll durchgedacht sind mussen.
-
Ne, man erklärt nur die Funktionen als statisch die man auch ohne Objekt ansprechen möchte. Alle anderen kann man ruhig "normal" deklarieren.
Ich habe das Makro jetzt in LogInstance umbenannt
Ja, speichern sollte man sie
-
Entschuldigung für den Doppelpost... aber ich bin gerade aus Versehen auf Absenden gekommen
(-.- solangsam wirds ziemlich peinlich hm ?
)
Danke für eure Antworten und das auch noch so fix