• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Error C2079 uses undefined class

Object Storage Arubacloud
0 głosów
135 wizyt
pytanie zadane 13 stycznia 2021 w C i C++ przez AnimPony Początkujący (440 p.)

Witam,

Kompilując kod:

#include <iostream>

using namespace std;

class Point2D;

int main() {
	Point2D P;
	return 0;
}

class Point2D {
public:
	int x;
	int y;
	int distance;
	Point2D(int a, int b) {
		this->x = a;
		this->y = b;
		this->distance = 0;
	}
};

Wyskakuje mi błąd C2079, niestety nie znalazłem na forum podobnego problemu, wpisując błąd w google znalazłem tylko jeden warty uwagi wpis: https://docs.microsoft.com/pl-pl/cpp/error-messages/compiler-errors-1/compiler-error-c2079?view=msvc-160

Jednakże nie rozumiem "przykładowego rozwiązania" problemu zaproponowanego przez autora :c

Czy jakaś miła duszyczka byłaby w stanie objaśnić, bądź podać mi warty uwagi artykuł czego dotyczy ten błąd oraz jakie błędy posiada mój kod^.

Na zakończenie dodam, iż zdaję sobie sprawę, że nagłówki klas i ich ciała powinny być umieszczone w oddzielnych plikach, natomiast chcę dowiedzieć się z czystej ciekawości czemu mój program odmawia posłuszeństwa, co pozwoli mi na łatwiejsze poruszanie się w języku CPP, z góry dziękuję.

1 odpowiedź

+1 głos
odpowiedź 13 stycznia 2021 przez tangarr Mędrzec (154,860 p.)
wybrane 13 stycznia 2021 przez AnimPony
 
Najlepsza
Aby utworzyć obiekt jakiejś klasy, musi być ona w pełni zdefiniowana.
Najprostszym rozwiązaniem będzie przesunięcie definicji klasy przed funkcję main.
komentarz 13 stycznia 2021 przez AnimPony Początkujący (440 p.)
Czy to oznacza, że w żadnym przypadku definicja klasy nie może znajdować się pod mainem?
1
komentarz 13 stycznia 2021 przez tangarr Mędrzec (154,860 p.)

Tu nie chodzi o funkcję main.

Jeżeli chcesz stworzyć obiekt jakiejkolwiek klasy, to musi być ona zdefiniowana przed linijką kodu, w której jej używasz.

Spójrz na taki przykład

#include <iostream>
 
using namespace std;
 
class Point2D;

// deklaracja funkcji zwracającej wskaźnik na klasę, która nie została jeszcze zdefiniowana
Point2D *nowy_punkt(int x, int y);
 
int main() {
    // tutaj nie możemy użyć konstruktora klasy
    // Point2D *P = new Point2D(1,1);
    Point2D *P = nowy_punkt(1, 1);

    // zwalnianie pamięci
    delete P;
    return 0;
}
 
class Point2D {
public:
    int x;
    int y;
    int distance;
    Point2D(int a, int b) {
        this->x = a;
        this->y = b;
        this->distance = 0;
    }
};

// definicja wcześniej zadeklarowanej funkcji
Point2D *nowy_punkt(int x, int y) {
    // teraz klasa Point2D jest znana
    return new Point2D(x,y);
}

 

komentarz 13 stycznia 2021 przez AnimPony Początkujący (440 p.)
Dziękuję bardzo

Podobne pytania

0 głosów
1 odpowiedź 313 wizyt
0 głosów
1 odpowiedź 111 wizyt
pytanie zadane 5 grudnia 2023 w C i C++ przez hutsalo1998 Użytkownik (520 p.)
+2 głosów
1 odpowiedź 84 wizyt

92,568 zapytań

141,420 odpowiedzi

319,623 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...