我试图获得对我的课程的引用,但似乎没有声明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);
^
答案 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
无关。相反,全球时间函数是冲突的。