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

标签 c++ class

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

相关文章:

powershell - [System.Web.Security.Membership]::GeneratePassword() - 找不到类型

带有指针的 C++ 类模板特化

c++ - 构造函数 Foo::Foo 接收到对 Foo 的引用但不是复制构造函数

c++ - 复制构造函数或赋值运算符或两者,这里调用哪个?

c++ - 客户端和服务器示例不工作

c++ - 在类的析构函数中关闭类的线程成员是个好主意吗?

c++ - 如果一个类有一个非纯析构函数,它还能是纯抽象的吗?

C++ 读取 PE 可选 header 以确定 DEP 和 ASLR

python - 从 **kwargs 构造期间设置类的属性

java - 需要有关应用程序类的解释