неверное форвардное объявление структуры

—РЕДАКТИРОВАТЬ —
Извините, что я запутал людей, я просто быстро набрал этот код вместо копирования и вставки, поэтому я на самом деле делаю #ifndef A_H #define A_H в своем коде. Я изменил код ниже, чтобы показать, что
— Конец редактирования —

У меня есть два класса, каждый из которых содержит указатель на экземпляр другого класса, но это создает проблемы для меня. Мой код похож на следующий

// A.h
#ifndef A_H
#define A_H

class B; // compiler error here

class A
{
B* foo;
// other members and functions
};

#endif

// A.cpp
#include "A.h"#include "B.h"/*
declare functions and use methods in both A and B
*/

// B.h
#ifndef B_H
#define B_H

class A;

class B
{
A** bar;
// other stuff
};

#endif

//B.cpp
#include "A.h"#include "B.h"/*
declare functions and use methods in both A and B
*/

Мне сказали, что переадресация объявления другого класса в заголовочный файл и последующего включения другого файла в файл cpp будет работать, но в отмеченной строке я получаю сообщение об ошибке, которое просто говорит: «форвардное объявление« struct b »»

Может кто-нибудь сказать мне, что я делаю не так?

1

Решение

Включите один заголовок, скажем, b.h в a.h. Не пересылать объявление B в ч.ч. б.ч может остаться как есть.

В противном случае вы получите что-то вроде

class B {};
....
class B;

Всегда целесообразно выполнять предварительную обработку только на таких ошибках.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]