Referência cruzada em C++ [RESOLVIDO]

1. Referência cruzada em C++ [RESOLVIDO]

Fábio Felix Dias
slack felix

(usa Slackware)

Enviado em 12/02/2009 - 16:32h

Olá,

Estou desenvolvendo uma aplicação onde necessito da seguinte implementação:

**********
Classe1.h
**********

include "Classe2.h"

class Classe1
{
};

**********
Classe2.h
**********

include "Classe1.h"

class Classe2
{
};

Ou seja, Classe1 inclui Classe2 e Classe2 inclui Classe1.

Infelizmente isso não está dando muito certo. O que eu posso fazer?

Encontrei esse post na net http://forum.clubedohardware.com.br/composicao-duas-classes/462113?p=2358991 ,mas se eu fizer isso com certeza o compilador vai dizer que tem mais de uma referencia para a mesma classe.







  


2. Tenta assim

Gabriel Duarte Guimarães Costa
gabrield

(usa Debian)

Enviado em 12/02/2009 - 17:04h

class Classe1;
class Classe2;

Classe1.h
**********

include "Classe2.h"

class Classe1
{
};

**********
Classe2.h
**********

include "Classe1.h"

class Classe2
{
};



3. Re: Referência cruzada em C++ [RESOLVIDO]

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 12/02/2009 - 18:32h

o problema é a recursão durante a expansão no pré-processador.
para contornar isso tente usar a diretiva '#pragma once' em ao menos uma das headers. no exemplo abaixo coloquei nas duas, como uma forma de "garantia", embora não seja vital.
a saber: a diretiva #pragma permite alterar o comportamento do pré-processador. o atributo once fará com que o pré-processador realize a expansão da header apenas uma vez, evitando assim reexpansões inúteis ou cíclicas, como nesse caso.

**********
Classe1.h
**********

#pragma once
#include "Classe2.h"

class Classe1
{
};

**********
Classe2.h
**********

#pragma once
#include "Classe1.h"

class Classe2
{
};


4. Re: Referência cruzada em C++ [RESOLVIDO]

Fábio Felix Dias
slack felix

(usa Slackware)

Enviado em 12/02/2009 - 22:57h

Obrigado pela ajuda.

mslomp, a utilização da diretiva #pragma não resolveu o meu problema, pelo menos com o compilador C++ Builder não. Talvez com o GCC ou outro compilador possa resolver.

gabrield, não entendi onde eu coloco as linhas class Classe1; e class Classe2;

Encontrei pouco sobre essa questão na internet. Algumas coisas um pouco vagas, mas isto foi a solução. Penso que seja a resolução proposta por gabrield que eu não compreendi.

http://www.inf.pucrs.br/~pinho/PRGSWB/ReferenciaCruzada/ReferenciaCruzada.html

Mas uma vez obrigado pela ajuda.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts