对象未在范围内声明

时间:2010-03-08 16:01:16

标签: c++ visual-studio xcode

我在学校使用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;
}

我把所有东西都剥离到我遇到问题的地方。据我所知,其他所有内容都无关紧要,因为上述问题仍然存在问题。

提前致谢!

3 个答案:

答案 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;放在标题中。
  • 如果你还没有头盔,你将需要头盔。
  • 您应该将构造函数实现移回模块文件,或者使其内联,因为链接器会抱怨。