如何在上课前创建对象?

时间:2019-03-03 06:02:04

标签: c++ declaration

我知道在声明之前我们不能使用变量或对象。

下面有三个类,为了使用这些类,我制作了三个对象(在类之前),我想是否要写类名;它会工作,但是会出错!

我已经在堆栈上搜索了与此相关的内容,但是我不清楚。

为什么我遇到错误以及如何删除它?

#include<iostream>
using namespace std;

class Bit;    
class Nibble; 
class Byte;   

Bit bito;   //Object for Bit
Nibble no;  //Object for Nibble
Byte byteo; //Object for Byte

class Bit
{
    public:

    static int count;
    static int bit[100000];

    void add()
    {
        bit[count++]=2;
    }
    void check()
    {
        int k=0;
        if(count)
        {
            for(int i=0;i<count;i++)
            {
                if(--bit[i]==0)
                {
                    no.add();
                    k++;
                }

            }
            int n=k;
            int i=0;
            while(n-->0)
            {
                bit[i]=bit[i+1];
                i++;
            }
            count-=k;
        }
    }


};

int Bit::count=0;
int Bit::bit[100000]={0};
bito.add();

class Nibble
{
    public:

    static int count;
    static int nibble[100000];

    void add()
    {
        nibble[count++]=8;
    }
    void check()
    {
        int k=0;
        if(count)
        {
            for(int i=0;i<count;i++)
            {
                if(--nibble[i]==0)
                {
                    byteo.add();
                    k++;
                }

            }
            int n=k;
            int i=0;
            while(n-->0)
            {
                nibble[i]=nibble[i+1];
                i++;
            }
            count-=k;
        }
    }


};

int Nibble::nibble[100000]={0};
int Nibble::count=0;

class Byte
{
    public:

    static int count;
    static int byte[100000];

    void add()
    {
        byte[count++]=16;
    }
    void check()
    {
        int k=0;
        if(count)
        {
            for(int i=0;i<count;i++)
            {
                if(--byte[i]==0)
                {
                    bito.add();
                    bito.add();
                    k++;

                }

            }
            int n=k;
            int i=0;
            while(n-->0)
            {
                byte[i]=byte[i+1];
                i++;
            }
            count-=k;
        }
    }


};

int Byte::count=0;
int Byte::byte[100000]={0};

1 个答案:

答案 0 :(得分:1)

简单的答案是,您不能-声明forward declaration(正如您所做的那样)仅使编译器知道存在您指定名称的类;它不会告诉编译器有关该类的任何信息(例如其大小),因此,编译器在实例化类的类声明之后才能实例化该类型的对象。因此,您需要在类的声明后 声明三个对象。