C++ friendfunktion

Här diskuteras programmering och utveckling
Användarvisningsbild
Retardedpope
Inlägg: 467
Blev medlem: 14 feb 2006, 19:31
Ort: Skåne

C++ friendfunktion

Inlägg 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.
Användarvisningsbild
Retardedpope
Inlägg: 467
Blev medlem: 14 feb 2006, 19:31
Ort: Skåne

Re: C++ friendfunktion

Inlägg av Retardedpope »

btw, why is this forum in english?
gusnan
Inlägg: 348
Blev medlem: 17 jan 2007, 08:20
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: C++ friendfunktion

Inlägg av gusnan »

svaret är forward declaration:

Kod: Markera allt

class Typ2;

class Typ1
{
   Typ2 *typ2;
};

class Typ2
{
   Typ1 *typ1;
};
Användarvisningsbild
Retardedpope
Inlägg: 467
Blev medlem: 14 feb 2006, 19:31
Ort: Skåne

Re: C++ friendfunktion

Inlägg 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?
Användarvisningsbild
Retardedpope
Inlägg: 467
Blev medlem: 14 feb 2006, 19:31
Ort: Skåne

Re: C++ friendfunktion

Inlägg 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.
Användarvisningsbild
Smygis
Inlägg: 849
Blev medlem: 21 jun 2006, 18:41
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Kramfors

Re: C++ friendfunktion

Inlägg av Smygis »

Retardedpope skrev:btw, why is this forum in english?
Kontrollpanel -> inställningar -> mitt språk. Och ändra till svenska.
A Foolish Consistency is the Hobgoblin of Little Minds.Beware: In C++, your friends can see your privates!
Skriv svar

Återgå till "Programmering och webbdesign"