我在学校使用Visual Studio时在我的计算机上使用Xcode for C ++。 以下代码在Visual Studio中运行良好,但在使用Xcode时遇到此问题。
clock c1(2, 3, 30);
一切正常,但它一直给我这个错误,上面写着“预期的”;在'c1'之前“
好吧,我把';' ..但是,它给了我这个错误:“'c1'未在此范围内声明”
这是整个标题代码:
#include <iostream>
using namespace std;
class clock
{
private:
int h;
int m;
int s;
public:
clock(int hr, int mn, int sec);
};
clock::clock(int hr, int mn, int sec)
{
h = hr;
m = mn;
s = sec;
}
这是整个.cpp代码:
#include "clock.h"
int main()
{
clock c1(2, 3, 30);
return 0;
}
我把所有东西都剥离到我遇到问题的地方。据我所知,其他所有内容都无关紧要,因为上述问题仍然存在问题。
提前致谢!
答案 0 :(得分:6)
有一个函数clock
会隐藏同名的clock
类。您可以通过说
class clock c1(2, 3, 30);
在标题中执行using namespace std;
是非常糟糕的做法。而是将该行仅放入cpp
文件中。如果删除该行(如果名称来自名称空间std::
而不是最初的全局名称空间),它可能会解决您的问题。
答案 1 :(得分:4)
您的时钟类定义与clock_t clock()
中的<ctime>
发生冲突(请参阅here)。
你可以通过指定你想要的类而不是Johannes描述的方式来解决它,但实际上你应该重命名你的类,以便它不会与标准函数冲突。这是最实用的解决方案。
重申约翰内斯所说的,不要将using namespace std;
放在标题中。这会导致std
命名空间被注入到包含标头的每个文件中,这会在某些时候导致标识符冲突。如果你真的需要它,但它只在源文件中,因为没有包含它。
答案 2 :(得分:0)
您应该将clock
类放入命名空间,以阻止它与clock()
冲突。
在提出问题之前已经完成了剥离其他所有事情的工作。
由于你已经删除了很多东西,你将把它全部放回去。您可能遇到其他问题:
using namespace std;
放在标题中。