我正在用 DevC++ 用 C++ 制作一个程序,用于查找从1
到n
位数字的缺失数字,但现在我收到一个错误:
[错误] ld 返回 1 个退出状态。
您可以看到我的程序并帮助我解决这个问题。 此程序现在仅对100
位数字有效。
#include <iostream>
using namespace std;
class miss_number
{
public:
static int arr[100];
int miss;
int n;
public:
void displayBoard();
void getInput();
void findMissing();
void displayMissing();
};
void miss_number :: displayBoard()
{
cout<<"The program for Finding Missing Number Between 1-100 digit";
}
void miss_number :: getInput()
{
int i;
cout<<"nEnter how many digits :";
cin>>n;
cout<<"nEnter the number between 1-100 digit :";
for(i=0;i<n-1;i++)
{
cin>>arr[i];
}
}
void miss_number :: findMissing()
{
int i,total,totalOfArray=0;
total = n*(n+1)/2;
for(i=0;i<n-1;i++)
{
totalOfArray = totalOfArray + arr[i];
}
miss = total - totalOfArray;
}
void miss_number :: displayMissing()
{
cout<<"nMissing number :"<<miss;
}
int main()
{
miss_number o;
o.displayBoard();
o.getInput();
o.findMissing();
o.displayMissing();
return 0;
}
错误来自声明
static int arr[100];
由于已将其声明为静态,因此必须在类外部定义它:
int miss_number::arr[100];
这样,程序就可以编译和链接。如果使用 C++17,您也可以将其声明为inline static
,效果将是相同的。
如果您只是删除声明中的static
而不添加任何其他内容,它也会进行编译,并且在您的情况下应该是执行此操作的正确方法,因为arr
是实例化对象的成员。这样,您就可以创建类的多个实例,并且每个实例都有自己的arr
。
话虽如此,您不需要在getInput
中返回arr
然后将其重新传递给findMissing
,因为它从类的所有成员函数内部都是可见的。只需从所有实例的findMissing
中删除所有参数即可解决此问题。