Тема: ООП Проблема з оголошенням класів

Щось в мене не виходить об'явити класи читав тут вроді все правильно роблю, спочатку ключове слово class потім назву

class NameVar;
class OpenFile;
class ListVar;
ListVar var[];

Ось сам код

#include <stdio.h>
#include <conio.h>
#include <iostream>
class NameVar;
class OpenFile;
class ListVar;
ListVar var[];

class OpenFile
{
private:
    FILE *CppFile;
public:
    OpenFile() : CppFile(NULL) {};
    OpenFile(char *str);
    void SearhVar();
};

OpenFile::OpenFile(char *str)
{
    CppFile = fopen(str, "r");
    if (CppFile == NULL)
    {
        printf("Fatal error\n");
    }
}

void OpenFile::SearhVar()
{
    int result = sizeof(var) / sizeof(ListVar);//find out the size of the array
    for (int i = 0; i < result; i++)
    {
        var[i].nameTypeVar;
        var[i].num;
        var[i].arrNameVar.nameVar;
    }
}

class NameVar
{
public:
    char *nameVar;
};

class ListVar
{
public:
    char *nameTypeVar;//name type variables
    int num;//number of variables
    NameVar arrNameVar;
}var[] =
{
    "char",   0, NULL,
    "bool",   0, NULL,
    "short",  0, NULL,
    "int",    0, NULL,
    "long",   0, NULL,
    "float",  0, NULL,
    "double", 0, NULL,
};

int main()
{

    getch();
    return 0;
}

Він працює якщо перемістити NameVar і ListVar на верх

Помилки

Прихований текст

Severity    Code    Description    Project    File    Line
Warning    C4996    'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    Вправа 6-2    21
Error    C2070    'ListVar []': illegal sizeof operand    Вправа 6-2    30
Error    C2027    use of undefined type 'ListVar'    Вправа 6-2    30
Error    C2027    use of undefined type 'ListVar'    Вправа 6-2    33
Error    C2228    left of '.nameTypeVar' must have class/struct/union    Вправа 6-2        33
Error    C2027    use of undefined type 'ListVar'    Вправа 6-2        34
Error    C2228    left of '.num' must have class/struct/union    Вправа 6-2        34
Error    C2027    use of undefined type 'ListVar'    Вправа 6-2        35
Error    C2228    left of '.arrNameVar' must have class/struct/union    Вправа 6-2        35
Error    C2228    left of '.nameVar' must have class/struct/union    Вправа 6-2        35

2

Re: ООП Проблема з оголошенням класів

ListVar var[];

Розмір масиву повинен бути відомим на етапі компіляції.
При forward declaration ви не можете використовувати конструкції, яким потрібно знати розмір user-defined типу, тільки вказівники та посилання. Масив це ж неперервна виділена пам’ять, а ви намагаєтесь виділити пам’ять під масив з невідомої кількості елементів, ще й самі елементи невідомого розміру.

Також використовуєте ListVar до його definition. (стр 33 і далі)

3

Re: ООП Проблема з оголошенням класів

var[] =

А хіба так можна об'єкти створювати?
Краще опиши створення за допомогою конструкторів.

...
   class ListVar
    {
    public:
        char *nameTypeVar;//name type variables
        int num;//number of variables
        NameVar arrNameVar;
        ListVar(char *s,int n,char *nameVar){
            strcpy(nameTypeVar,s);
            num=n;
            strcpy(arrNameVar.nameVar,nameVar);
        }
    }
    
int _tmain(int argc, _TCHAR* argv[])
{
    ListVar *vars[7];
    vars[0]= new ListVar("char",   0, "NULL");
    vars[1]= new ListVar("bool",   0, "NULL");
    ...
    return 0;
}