似乎无法在主要课堂上打电话

时间:2014-12-09 22:10:53

标签: c++

我试图获得对我的课程的引用,但似乎没有声明to

这意味着它未被宣布:

#include <iostream>
using namespace std;

class time
{
private:
    int sec;
    int mins;
    int hours;
public:
    void setSeconds(int x)
    {
        sec = x;
    }

    int getSeconds()
    {
        return sec;
    }
};

int main()
{
    time to;
    to.setSeconds(10000000);
    cout << to.getSeconds() << endl;
    return 0;
}

错误如下:

main.cpp: In function 'int main()':
main.cpp:29:10: error: expected ';' before 'to'
     time to;
          ^
main.cpp:29:12: warning: statement is a reference, not call, to function 'time' [-Waddress]
     time to;
            ^
main.cpp:29:12: warning: statement has no effect [-Wunused-value]
main.cpp:30:5: error: 'to' was not declared in this scope
     to.setSeconds(10000000);
     ^

2 个答案:

答案 0 :(得分:8)

std::time是C ++标准库中的一个函数,因为您using namespace std,默认情况下使用的是[而不是您的类。]

你甚至不能写::time来引用你的,因为你的编译器的标准库实现恰好包含旧的C ::time,然后再将它包装到namespace {{ 1}}。

使用部分或全部建议:

  • 为您的班级提供更好,更独特的名称
  • std来引用你的班级(this ensures the type time is used,但这是一个糟糕的黑客)
  • 自己使用命名空间以避免将来出现所有歧义(建议这样做)

你也应该暂停class time以尽可能避免尽可能多的麻烦,尽管在这种情况下它无法直接帮助你。

答案 1 :(得分:1)

Clang提供更好的错误消息:

time.cpp:29:5: error: must use 'class' tag to refer to type 'time' in this scope
    time t;
    ^
    class 
/usr/include/time.h:192:15: note: class 'time' is hidden by a non-type declaration of 'time' here
extern time_t time (time_t *__timer) __THROW;
              ^

using namespace std无关。相反,全球时间函数是冲突的。