我有两个文件: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 "";
}
我的编译器(Visual Studio 2012)在函数getCurrentTimeStamp()
返回std::string
对象时正在吐出错误。错误都指向语法问题,但没有一个是明确的。有谁理解为什么会出现这种情况?
更新:以下是(部分)错误。
错误6错误C2064:term不评估为0的函数 参数c:\ users \ anthony \ documents \ code \ 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':重新定义; 不同的基础 类型c:\ users \ anthony \ documents \ code \ consoleapplication1 \ datetime.cpp 10 1 ConsoleApplication1
答案 0 :(得分: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
不是空的。
如果我稍微修改一下代码:
//#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