Date Редакция Категория comp Теги Cpp

Ошибка этого вида обычно возникает при попытке использовать тип данных, который еще не определен.

Пример. Есть основной класс mother и подкласс daughter:

//main.cpp
#include "mother.h"
#include "daughter.h"
#include <iostream>

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    mother mom;
    mom.saywhat();
    return 0;
}
//mother.h
#ifndef MOTHER_H
#define MOTHER_H

class mother
{
public:
    mother();
    void saywhat();
};

#endif // MOTHER_H
//mother.cpp
#include "mother.h"
#include <iostream>

using namespace std;

mother::mother()
{
}

void mother::saywhat()
{
    cout << "WHAAAAAAT" << endl;
}
//daughter.h
#ifndef DAUGHTER_H
#define DAUGHTER_H

class daughter: public mother
{
public:
    daughter();
};

#endif // DAUGHTER_H
//daughter.cpp
#include "daughter.h"
#include "mother.h"
#include <iostream>

using namespace std;

daughter::daughter()
{
}

Компилятор выдает следующую ошибку:

daughter.h  5  error: expected class-name before ‘{’ token

Проблема в том, что при создании класса daughter базовый класс mother еще не определен. Исправляется это добавлением в daughter.h строки

//daughter.h
#ifndef DAUGHTER_H
#define DAUGHTER_H

#include "mother.h" // добавленная строка

class daughter: public mother
{
public:
    daughter();
};

#endif // DAUGHTER_H


Комментарии

comments powered by Disqus