gpt4 book ai didi

c++ - 自定义类错误: incomplete type and can't be defined

转载 作者:太空狗 更新时间:2023-10-29 23:14:32 24 4
gpt4 key购买 nike

我想定义一个类Add来存储Big Integer并计算它的总和,但是当我尝试实例化类时出现错误:

错误是:错误:类型不完整,无法定义

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

class Add;

int main()
{
char text[102];
Add sum; //error?
while(cin>>text)
{
if(text[0]=='0' && text[1]=='\0')
break;
Add num(text); //error?
sum+=num;
}
sum.display();
return 0;
}

class Add //Used to store and calculate big integer
{
public:
Add():text(NULL),numSize(0) { memset(arr,0,sizeof(arr)); }
Add(char *t);
Add& operator+=(Add& rhs);

void display();
private:
char* text;
int arr[110];
int numSize;

void toIntArr();
void toCharArr();

};

Add::Add(char* t):text(t),numSize(0)
{
memset(arr,0,sizeof(arr));
toIntArr();
while(t!='\0')
{
++numSize;
++t;
}

}

Add& Add::operator+=(Add& rhs)
{
int carryBit=0;
for(int i=0; i<numSize; ++i)
{
int sum=arr[i]+rhs.arr[i]+carryBit; //可以访问私有成员?
if(sum>=10)
{
arr[i]=sum/10;
carryBit=sum%10;
}
else
{
arr[i]=sum;
carryBit=0;
}
}
if(carryBit!=0)
arr[numSize++]=carryBit;
toCharArr();

return *this;
}

void Add::toIntArr()
{
for(int i=0; i<numSize; ++i)
arr[numSize-i-1]=text[i]-'0';
}

void Add::toCharArr()
{
for(int i=0; i<numSize; ++i)
text[numSize-i-1]=arr[i]+'0';
text[numSize]='\0';
}

void Add::display()
{
for(int i=0; i<numSize; ++i)
cout<<arr[i];
}

最佳答案

当编译器实例化一个对象时,它应该知道正确分配内存的对象的大小。 cmpiler 还需要知道调用适当构造函数的构造函数声明。

在您的程序中,该类仅在使用前声明。

class Add;

int main()
{
char text[102];
Add sum;
//...

所以编译器不知道如何创建对象sum。将类定义放在 main 中的使用之前。

或者将类定义放在一个头文件中,并将这个头文件包含在带有 main 的模块中。

关于c++ - 自定义类错误: incomplete type and can't be defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33363906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com