Ошибка этого вида обычно возникает при попытке использовать тип данных, который еще не определен.
Пример. Есть основной класс 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