Sida 1 av 1

C++ friendfunktion

Postat: 23 mar 2008, 19:04
av Retardedpope
Har länge funderat på att testa ubuntu sveriges programmeringsforum, men har inte haft något lämpligt problem. Nu har jag ett ganska allmänt c++ problem och jag tänkte att det kan vara lämpligt att testa detta forum med det problemet.

Ok, jag har två klasser Menu och Graphics. I Graphics finns följande funktion:

Kod: Markera allt

void blitMenu(Menu*);
och den funktionen behöver komma åt Menu's privata medlemsvariabler, så därför finns

Kod: Markera allt

friend void Graphics::blitMenu(Menu*);
med i deklarationen av Menu.
Problemet är att gcc klagar:

Kod: Markera allt

Menu.h:18: fel: "Graphics" har inte deklarerats
Saken är bara den att jag inkluderat Graphics.h i Menu.h och Menu.h i Graphics.h, så jag förstår inte hur jag skulle kunna få dem deklarerade. Antar att det har att göra med att för att kunna deklarera Graphics måste Menu vara deklarerat och för att kunna deklarera Menu måste Graphics vara deklarerat. Jag har dock aldrig använt friend-funktioner förut, så jag är ganska new to problematiken. Tänkte att någon borde ha haft samma eller liknande problem och kanske har en lösning eller åtminstone en workaround på problemet.

Bara för att jag skrev att jag testar forumet betyder inte det att problemet inte är riktigt, utan att jag tar reda på om det är någon mening med att posta sina problem här i fortsättningen eller om jag bör vända mig någon annanstans. Kan tänka mig att det finns andra forum som är bättre lämpade, men jag tyckte att det skulle vara intressant att se hur bra hjälp det här forumet har att erbjuda. Tänkte att det kanske hänger några erfarna c++-programmerare på forumet.

Tacksam för all hjälp.

Re: C++ friendfunktion

Postat: 23 mar 2008, 19:05
av Retardedpope
btw, why is this forum in english?

Re: C++ friendfunktion

Postat: 23 mar 2008, 19:13
av gusnan
svaret är forward declaration:

Kod: Markera allt

class Typ2;

class Typ1
{
   Typ2 *typ2;
};

class Typ2
{
   Typ1 *typ1;
};

Re: C++ friendfunktion

Postat: 23 mar 2008, 20:16
av Retardedpope
Det hjälpte så tillvida att jag fick ett annat felmeddelande:

Kod: Markera allt

Menu.h:19: fel: medlem "void Graphics::blitMenu(Menu*)" deklarerades som vän före typ "Graphics" definieras
vilket egentligen inte är mycket till hjälp.

Fler idéer?

Re: C++ friendfunktion

Postat: 23 mar 2008, 20:47
av Retardedpope
Jag har möjligen löst det. Jag har fått det att kompilera.
Jag får återkomma om det blir problem sen. Bara för att det kompilerar behöver det ju inte fungerar. Jag blev nämligen lite förvånad över att min lösning överhuvudtaget kompilerade.
Aja, tack för hjälpen.

Re: C++ friendfunktion

Postat: 24 mar 2008, 21:32
av Smygis
Retardedpope skrev:btw, why is this forum in english?
Kontrollpanel -> inställningar -> mitt språk. Och ändra till svenska.