Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Błąd kompilacji: Wykorzystanie niezdefiniowanego przez użytkownika typu "Dwa"

Ostatnio zmodyfikowano 2021-08-25 10:04
Autor Wiadomość
krystian123456
Temat założony przez niniejszego użytkownika
Błąd kompilacji: Wykorzystanie niezdefiniowanego przez użytkownika typu "Dwa"
» 2021-08-25 09:03:32
Czemu poniższy program daje błąd ,,wykorzystanie niezdefiniowanego przez użytkownika typu "Dwa" '' ?

C/C++
class Dwa;
class Jeden
{
public:
   
string g, m;
   
static void about( Dwa * m, string text1, string text2 )
   
{
       
m->z = text1;
       
m->d = text2;
   
}
   
}
;

class Dwa
{
public:
   
string z, d;
   
void shha()
   
{
       
Jeden::about( this, "masro", "flono" );
   
}
   
void shw()
   
{
       
cout << z << " " << d << endl;
   
}
}
;

int main()
{
   
Dwa x;
   
x.shha();
   
x.shw();
   
return 0;
}
P-178876
DejaVu
» 2021-08-25 09:35:45
Błąd występuje, ponieważ w implementacji metody 'about' używasz pól klasy 'Dwa', ale kompilator nie zna jeszcze jej opisu, ponieważ jest ona zdefiniowana później niż jej użycie. Rozwiązanie:
C/C++
class Dwa;
class Jeden
{
public:
   
string g, m;
   
static void about( Dwa * m, string text1, string text2 );
   
};

class Dwa
{
public:
   
string z, d;
   
void shha()
   
{
       
Jeden::about( this, "masro", "flono" );
   
}
   
void shw()
   
{
       
cout << z << " " << d << endl;
   
}
}
;

//static
void Jeden::about( Dwa * m, string text1, string text2 )
{
   
m->z = text1;
   
m->d = text2;
}

int main()
{
   
Dwa x;
   
x.shha();
   
x.shw();
   
return 0;
}
P-178877
krystian123456
Temat założony przez niniejszego użytkownika
» 2021-08-25 09:44:28
Dziękuje, też myślałem że w tym jest błąd ale myślałem że dodanie na początku class Dwa; rozwiąże problem
P-178878
DejaVu
» 2021-08-25 09:48:41
Dodanie
class Dwa;
 umożliwia Ci tworzenie wskaźników na ten typ, ale nie możesz tego typu używać dopóki nie wystąpi pełny opis tej klasy.
P-178879
krystian123456
Temat założony przez niniejszego użytkownika
» 2021-08-25 10:01:32
Po uruchomieniu tego kodu wyskakuje mi błąd : ,,nie można określić klasy magazynu w tym miejscu"  oraz ,, „Jeden::about”: „static” nie powinien zostać użyty w funkcji składowej zdefiniowanej w zakresie plik"
 
C/C++
static void Jeden::about( Dwa * m, string text1, string text2 )
{
   
m->z = text1;
   
m->d = text2;
}
P-178880
DejaVu
» 2021-08-25 10:03:50
Poprawiłem kod.
P-178881
krystian123456
Temat założony przez niniejszego użytkownika
» 2021-08-25 10:04:44
Teraz działa
P-178882
« 1 »
  Strona 1 z 1