2016-10-03 2 views
-3

Ich habe zwei Dateien: DateTime.h und DateTime.cpp, die unten:Zurückgeben einer Zeichenfolge aus statischen Funktion

DateTime.h

class DateTime 
{ 
public: 
    static string getCurrentTimeStamp(); 
}; 

DateTime.cpp

#include "stdafx.h" 
#include "DateTime.h" 
#include <ctime> 
#include <chrono> 
#include <iostream> 
#include <string> 
using namespace std; 

string DateTime::getCurrentTimeStamp() 
{ 
    return ""; 
} 

Mein Compiler (Visual Studio 2012) spuckt Fehler aus, sobald ich die Funktion getCurrentTimeStamp() ein std::string Objekt zurückgeben lasse. Die Fehler weisen alle auf syntaktische Probleme hin, aber keine sind klar. Versteht jemand, warum dies der Fall sein kann?

Update: Hier sind (einige von) die Fehler.

Fehler 6 Fehler C2064: Ausdruck ergibt keine Funktion unter 0 Argumente c: \ users anthony \ Dokumente \ \ code \ ConsoleApplication1 \ datetime.cpp 21 1 ConsoleApplication1

Fehler 1 Fehler C2146: Syntaxfehler: fehlt ';' Before identifier 'getCurrentTimeStamp' c: \ Benutzer \ anthony \ Dokumente \ code \ consoleapplication1 \ datetime.h 5 1 ConsoleApplication1

Fehler 7 Fehler C2146: Syntaxfehler: fehlt ';' vor Bezeichner 'getCurrentTimeStamp' c: \ Benutzer \ anthony \ Dokumente \ code \ ConsoleApplication1 \ datetime.h 5 1 ConsoleApplication1

Fehler 5 Fehler C2371: 'Datetime :: getCurrentTimeStamp': Neudefinition; verschiedene Grundtypen c: \ users \ anthony \ Dokumente \ code \ ConsoleApplication1 \ datetime.cpp 10 1 ConsoleApplication1

+1

fehlt # include mascoj

+0

Sie einfach verwenden '# include ' und 'std :: string' wie gewünscht? –

+1

Es könnte helfen, wenn Sie uns gesagt haben, was die Fehler sind? – Galik

Antwort

2

Beim Versuch, ein Problem mit einer Header-Datei zu diagnostizieren, insbesondere einem einfachen wie diesen, Schritt 1 ist zu versuchen und zu sehen, was der Compiler sieht.

#include ist eine Pre-Prozessor-Direktive, so dass die Compiler es nicht sehen, sondern der Compiler sieht die vorverarbeiteten Ausgabe der Datei, die Sie versuchen zu schließen.

So würde der Code wie folgt aussehen:

#include "stdafx.h" 

    //#include "DateTime.h" 
    class DateTime 
    { 
    public: 
     static string getCurrentTimeStamp(); 
    }; 
    //#include "DateTime.h" 

    #include <ctime> 
    #include <chrono> 
    #include <iostream> 
    #include <string> 
    using namespace std; 

    string DateTime::getCurrentTimeStamp() 
    { 
     return ""; 
    } 

http://rextester.com/MODV66772

Als ich das Online-Visual Studio auf RexTester versuchen und kompilieren, erhalte ich sehr unterschiedliche Fehler, mich, dass Ihr stdafx.h isn sagen‘ t leer.

Wenn ich ändern Sie den Code ein wenig:

//#include "stdafx.h" 

    //#include "DateTime.h" 
    #include <string> 

    class DateTime 
    { 
    public: 
     static std::string getCurrentTimeStamp(); 
    }; 
    //#include "DateTime.h" 

    #include <ctime> 
    #include <chrono> 
    #include <iostream> 
    #include <string> 
    using namespace std; 

    string DateTime::getCurrentTimeStamp() 
    { 
     return ""; 
    } 

Dies kompiliert nun ohne die Fehler/Warnungen Sie berichten: http://rextester.com/PXE62490

Die Änderungen:

  • in der Header-Datei enthalten , da der Header davon abhängt,
  • std::string statt string verwenden ,

Die C++ Compiler ist ein Single-Pass-Compiler, so dass die Header-Datei kann nicht wissen, dass Sie using namespace std zu tun, später beabsichtigen, und selbst wenn es so wäre, dann ist es eine schreckliche Praxis, weil der std Namensraum dicht ist besiedelt.

Wenn Sie absolut nicht mit der Eingabe std:: über den ganzen Ort tun können, versuchen Sie using die Namen, die Sie benötigen, z.

using std::string; // string no-longer needs to be std::string 
+0

Vielleicht war 'DateTime.h' in' stdafx.h' enthalten? –

Verwandte Themen