我想定义一个类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/