#c #declaration
#c #объявление
Вопрос:
Я знаю, что мы не можем использовать переменную или объект перед объявлением в.
Ниже приведены три класса, и для того, чтобы использовать этот класс, я создал три объекта (перед классом), и я подумал, что если я напишу имя класса, это сработает, но выдает ошибку!
Я искал связанные с этим в stack, но мне не разъяснили.
Почему я получаю ошибку и как ее удалить?
#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. Никаких сожалений и никакого другого способа, поэтому я использовал вспомогательные функции.
Ответ №1:
Простой ответ заключается в том, что вы не можете — объявление forward declaration
(как вы делаете) только позволяет компилятору узнать, что класс с указанным вами именем существует; это ничего не сообщает компилятору о классе (например, о его размере), и, следовательно, компилятор не может создавать экземпляры объектов этого типа до тех пор, пока он не будет проанализирован в объявлениях классов их классов. Итак, вам нужно будет объявить ваши три объекта после объявления их класса.
Комментарии:
1. что вы подразумеваете под синтаксическим анализом?
2. Благодаря Джереми Фризнеру теперь я понял ошибку.