2016-10-03 114 views
-3

字符串我有兩個文件:DateTime.h和DateTime.cpp其如下所示:返回從靜態函數

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 ""; 
} 

我的函數getCurrentTimeStamp()返回std::string對象,我的編譯器(Visual Studio 2012)正在吐出錯誤。這些錯誤都指向語法問題,但沒有一個是明確的。有誰知道爲什麼會出現這種情況?

更新:這裏是(一些)的錯誤。

錯誤6錯誤C2064:術語不計算爲服用0 參數C中的函數:\ Users \用戶安東尼\文件\代碼\ consoleapplication1 \ datetime.cpp 21 1 ConsoleApplication1

錯誤1錯誤C2146:語法錯誤:缺少';'在標識符 'getCurrentTimeStamp'c:\ users \ anthony \ documents \ code \ consoleapplication1 \ datetime.h 5 1 ConsoleApplication1

錯誤7錯誤C2146:語法錯誤:缺少';'在標識符 'getCurrentTimeStamp'c:\ users \ anthony \ documents \ code \ consoleapplication1 \ datetime.h 5 1 ConsoleApplication1

錯誤5錯誤C2371:'DateTime :: getCurrentTimeStamp':redefinition; 不同的基本 類型C:\用戶\安東尼\文件\代碼\ consoleapplication1 \ datetime.cpp 10 1 ConsoleApplication1

+1

缺少的#include mascoj

+0

您只需使用'#包括'和'的std :: string'的要求? –

+1

如果你告訴我們錯誤是什麼,它可能會有幫助嗎? – Galik

回答

2

當試圖診斷問題與一個頭文件,尤其是一個簡單的像這樣,第1步是試圖看看編譯器看到什麼。

#include是一個預處理器指令,所以編譯器沒有看到它,而是編譯器看到了您要包含的文件的預處理輸出。

所以您的代碼會是這個樣子:

#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

當我嘗試整理了這對RexTester的在線Visual Studio中,我得到非常不同的錯誤,告訴我,你的stdafx.h ISN」 t空了。

如果我修改代碼一點:

//#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 ""; 
    } 

現在這編譯沒有錯誤/警告要報告:http://rextester.com/PXE62490

的變化:

  • 包括在頭文件,因爲標題取決於它,所以
  • 使用std::string而不是string

C++編譯器是單通編譯器,頭文件可以不知道你是打算做using namespace std後,即使它沒有,這是一個可怕的做法,因爲std命名空間是密集填充。

如果您完全無法在整個地方打字std::,請嘗試using您需要的名字,例如:

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

也許'DateTime.h'包含在'stdafx.h'中? –