一直报错[Error] ld returned 1 exit status,为什么呀
#include
using namespace std;
class Time //声明Time类
{
public:
Time( int = 0, int = 0, int = 0 ); // 带默认参数的构造函数
// set functions
void setTime( int, int, int ); // 设置hour, minute, second
void setHour( int ); // 设置hour (确保数据在合理范围)
void setMinute( int ); // 设置minute (确保数据在合理范围)
void setSecond( int ); // 设置second (确保数据在合理范围)
// get functions
int getHour(); // 返回 hour
int getMinute(); // 返回 minute
int getSecond(); // 返回 second
void printUniversal(); // 按24小时格式输出时间:23:56:12
void printStandard(); // 按12小时格式输出时间:11:56:12 (PM) 或 9:23:55(AM)
private:
int hour; // 0 - 23 (24小时格式)
int minute; // 0 - 59
int second; // 0 - 59
}; // Timel类定义结束
void Time::setTime(int hour,int minute,int second)
{
setHour(hour);
setMinute(minute);
setSecond(second);
}
void Time::setHour(int inh)
{
if (inh >= 0 && inh < 24)
hour = inh;
else
cout<<"hour 必须为 0-24"<Minute(int m)
{
if (m >= 0 && m < 60)
minute = m;
else
cout<<"minute 必须为 0-60"<Second(int s)
{
if (s >= 0 && s < 60)
second = s;
else
cout<<"second 必须为 0-60"<int Time::getHour()
{
return hour;
}
int Time::getMinute()
{
return minute;
}
int Time::getSecond()
{
return second;
}
void Time::printUniversal()
{
cout<":"<":"<Standard()
{
if(hour<12)
{
cout<":"<":"<"(AM)";
}
else
{
int hour_pm;
hour_pm=hour-12;
cout<":"<":"<"(PM)";
}
}
void test01()
{
Time t1(23,56,12);
Time t2(11,56,12);
Time t3(21,23,55);
t1.printUniversal();
t2.printStandard();
t3.printStandard();
}
int main()
{
test01();
}
构造函数声明后还需要定义下,补上构造函数的定义应该就可以了。
修改如下:
参考链接:
#include<iostream>
using namespace std;
class Time //声明Time类
{
public:
Time( int = 0, int = 0, int = 0 ); // 带默认参数的构造函数
// set functions
void setTime( int, int, int ); // 设置hour, minute, second
void setHour( int ); // 设置hour (确保数据在合理范围)
void setMinute( int ); // 设置minute (确保数据在合理范围)
void setSecond( int ); // 设置second (确保数据在合理范围)
// get functions
int getHour(); // 返回 hour
int getMinute(); // 返回 minute
int getSecond(); // 返回 second
void printUniversal(); // 按24小时格式输出时间:23:56:12
void printStandard(); // 按12小时格式输出时间:11:56:12 (PM) 或 9:23:55(AM)
private:
int hour; // 0 - 23 (24小时格式)
int minute; // 0 - 59
int second; // 0 - 59
}; // Timel类定义结束
// https://blog.csdn.net/qq_43403759/article/details/113391196
Time::Time( int hour,int minute,int second){ // 类构造函数的定义
setTime(hour,minute,second);
}
void Time::setTime(int hour,int minute,int second)
{
setHour(hour);
setMinute(minute);
setSecond(second);
}
void Time::setHour(int inh)
{
if (inh >= 0 && inh < 24)
hour = inh;
else
cout<<"hour 必须为 0-24"<<endl;
}
void Time::setMinute(int m)
{
if (m >= 0 && m < 60)
minute = m;
else
cout<<"minute 必须为 0-60"<<endl;
}
void Time::setSecond(int s)
{
if (s >= 0 && s < 60)
second = s;
else
cout<<"second 必须为 0-60"<<endl;
}
int Time::getHour()
{
return hour;
}
int Time::getMinute()
{
return minute;
}
int Time::getSecond()
{
return second;
}
void Time::printUniversal()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
void Time::printStandard()
{
if(hour<12)
{
cout<<hour<<":"<<minute<<":"<<second<<"(AM)"<<endl;
}
else
{
int hour_pm;
hour_pm=hour-12;
cout<<hour_pm<<":"<<minute<<":"<<second<<"(PM)"<<endl;
}
}
void test01()
{
Time t1(23,56,12);
Time t2(11,56,12);
Time t3(21,23,55);
t1.printUniversal();
t2.printStandard();
t3.printStandard();
}
int main()
{
test01();
}
可能是数组开太大的原因
然后没兴趣的可以改一下程序试试,感兴趣的可以看看我的心酸历程
原本的错误长这样:
/tmp/ccWem6tZ.o:在函数‘__static_initialization_and_destruction_0(int, int)’中:
p.cpp:(.text+0x651): 截断重寻址至相符: R_X86_64_PC32 针对 .bss
p.cpp:(.text+0x664): 截断重寻址至相符: R_X86_64_PC32 针对 .bss
collect2: error: ld returned 1 exit status
在搜索解决方法的过程中也看到有人由于这个错误很绝望,我也没有绝望吧但是真的麻烦了好久。
一看是全部复制粘贴百度,但是什么都搜不到,后来搜这一句p.cpp:(.text+0x651): 截断重寻址至相符: R_X86_64_PC32 针对 .bss
结果还是什么有用的东西都没有;
还尝试过这一句函数‘__static_initialization_and_destruction_0(int, int)’
知道了原来c程序运行的时候,对于函数会先生成一个这个‘__static_initialization_and_destruction_0(int, int)’来虚拟运行啥的= =
我也搞不清
最后搜ld returned 1 exit status
发现有人列出了几个可能的情况:
函数名不对,如printf,scanf什么的打错了
自定义的函数调用时名字写错
可是我寻思这也不是没遇见过啊,报错一般是 not declare 啥的啊。。。
总之检查了一遍没有这种情况;