我知道在声明之前我们不能使用变量或对象。
下面有三个类,为了使用这些类,我制作了三个对象(在类之前),我想是否要写类名;它会工作,但是会出错!
我已经在堆栈上搜索了与此相关的内容,但是我不清楚。
为什么我遇到错误以及如何删除它?
#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};
答案 0 :(得分:1)
简单的答案是,您不能-声明forward declaration
(正如您所做的那样)仅使编译器知道存在您指定名称的类;它不会告诉编译器有关该类的任何信息(例如其大小),因此,编译器在实例化类的类声明之后才能实例化该类型的对象。因此,您需要在类的声明后 声明三个对象。