Я погружаюсь в холодную метель изучения C ++.Я уже знаю Java, но C ++ кажется странным в некоторых вещах.
Вот в чем дело: у меня есть класс A и класс B. У класса A есть экземпляр класса B внутри себя.Класс B должен иметь возможность вызывать некоторые методы класса A, поэтому я помещаю указатель на класс A внутри конструктора класса B и сохраняю его внутри переменной, чтобы я мог получить эти методы с помощью этой переменной.
Здесьмой код (упрощенно):
ClassA.h
#ifndef CLASSA
#define CLASSA
#include "ParentClass.h"
#include "ClassB.h"
class ClassA : public ParentClass {
private:
ClassB *classB;
public:
ClassA(void);
virtual ~ClassA(void);
};
#endif
ClassA.cpp
#include "ClassA.h"
//-----------------------------------------------------
ClassA::ClassA(void){
classB= new ClassB(this);
}
//-----------------------------------------------------
ClassA::~ClassA(void)
{
}
//-----------------------------------------------------
ClassB.h
#ifndef CLASSB
#define CLASSB
#include "ClassA.h"
class ClassB{
public:
ClassB(ClassA &pClassA){ classA = pClassA; };
ClassA *getClassAInstance(){ return classA; };
private:
ClassA *classA;
};
#endif
ClassB.cpp
#include "ClassA.h"
/*ClassB::ClassB(void){
classA= pClassA;
}*/
Visual Express не выдает ошибок, но когда я компилирую, он говорит, что класс B не распознает, что такое класс A. Что за черт?
1> c: \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ ClassB.h (8): ошибка C2061: синтаксическая ошибка: идентификатор 'ClassA'
1> c: \ xxx\ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ ClassB.h (10): ошибка C2143: синтаксическая ошибка: отсутствует ';'до '*'
1> c: \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ ClassB.h (10): ошибка C4430: отсутствует указатель типа - предполагается int.Примечание: C ++ не поддерживает default-int
1> c: \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ ClassB.h (10): ошибка C4430: отсутствует спецификатор типа -Int предполагается.Примечание: C ++ не поддерживает default-int
1> c: \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ ClassB.h (10): предупреждение C4183: 'getClassAInstance':отсутствует возвращаемый тип;предполагается, что это функция-член, возвращающая 'int'
1> c: \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ ClassB.h (13): ошибка C2143: синтаксическая ошибка:отсутствует ';'перед '*'
1> c: \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ ClassB.h (13): ошибка C4430: отсутствует указатель типа - предполагается int.Примечание: C ++ не поддерживает default-int
1> c: \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ ClassB.h (13): ошибка C4430: отсутствует спецификатор типа -Int предполагается.Примечание: C ++ не поддерживает default-int
1> c: \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ ClassB.h (8): ошибка C2065: 'classA':необъявленный идентификатор
1> c: \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ ClassB.h (8): ошибка C2065: 'pClassA': необъявленный идентификатор
1> c: \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ xxx \ ClassB.h (10): ошибка C2065: 'classA': необъявленный идентификатор
Необъявленный что?Возвращая int?
необъявленный идентификатор
Почему?Я включил все, верно?Есть идеи, что не так, ребята?