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

Błąd C2011 - "...": "class" wpisz ponownie definicję

Object Storage Arubacloud
+1 głos
672 wizyt
pytanie zadane 12 czerwca 2021 w C i C++ przez NoelQ Nowicjusz (190 p.)

Cześć mam problem... napisałem program w c++, jeszcze nie jest skończony ale już blisko. Wyskakuje mi błąd jak w tytule: C2011 - "Pozywienie": "class" wpisz ponownie definicję

Wyczytałem w internecie że mogę zastosować #pragma once albo #ifndef... ale nie pomogło, albo źle użyłem

 

2 odpowiedzi

+3 głosów
odpowiedź 12 czerwca 2021 przez adrian17 Ekspert (344,860 p.)
Po pierwsze, zmień język błędów na angielski ;) Bo "wpisz ponownie definicję" to jest kompletnie bezsensowne tłumaczenie, w dodatku słabo guglowalne.

Po drugie, tak, każdy nagłówek (.h) powinien mieć include guarda - czy #ifdef, czy #pragma once. Niezależnie czy masz problemy czy nie, nagłówki powinny to mieć więc zacznij od ogarnięcia tego w kazdym nagłówku, po czym spróbuj ponownie. Jak dalej będziesz mieć problemy, to wrzuć normalnie kod - nie screenshotami, tylko tekstem (tutaj / gist / pastebin / repo na githubie)...
komentarz 12 czerwca 2021 przez NoelQ Nowicjusz (190 p.)
edycja 13 czerwca 2021 przez NoelQ
Właśnie próbowałem zrobić z #ifdef ale nie wiem czy to źle zrobiłem czy też nie działa, mam #pragma once wszędzie w .h.

Link do plików: -----------------------------

Właśnie definiowałem już klasy w innym pliku ale znajomy mi mówił że w ten sposób też będzie działało, jeśli masz czas będę bardzo wdzięczny mam w pliku plansza.cpp losowanie przedmiotów tak jak wysłałem ss i nie wiem jak mogę to inaczej połączyć.
komentarz 12 czerwca 2021 przez adrian17 Ekspert (344,860 p.)
Nie wiem co masz na myśli. Po prostu w IPrzedmiot.cpp źle definiujesz metody klasy (ponownie definiując całą klasę). W Plansza.cpp na oko robisz to poprawnie.
komentarz 12 czerwca 2021 przez NoelQ Nowicjusz (190 p.)
No właśnie nie wiem jak mam to zrobić w sensie podpowiesz jak mogę naprawić te klasy?
Bo próbuje to zrobić już od kilku godzin i nie mam pojęcia. Jak próbuje wyskakuje mi tylko więcej błędów
komentarz 12 czerwca 2021 przez adrian17 Ekspert (344,860 p.)
Poważnie, poczytaj dowolny materiał o implementowaniu klasy w podziale na .h i .cpp, nie będę robić z tego wykładu w komentarzu :(

Przecież w Plansza.cpp to wygląda rozsądnie, to nie wiem czemu teraz nagle nie możesz tego analogicznie zrobić tutaj, tylko dziwnie wynajdujesz żeby drugi raz klasę deklarować.
komentarz 13 czerwca 2021 przez NoelQ Nowicjusz (190 p.)

Ogólnie coś naprawiłem ale przy okazji wyskoczyło mi więcej błedów

Naprawiłem bład z deklarowaniem klasy ale mam błąd z: (C2027 wykorzystanie niezidentyfikowanego przez użytkownika typu "Zolnierz"

IPrzedmiot.h

#pragma once
#include "Zolnierz.h"
#include <iostream>
#include <string>
class Zolnierz;


class IPrzedmiot
{
public:
    virtual ~IPrzedmiot() {}
    virtual void uzyj(Zolnierz* z) = 0;
    virtual bool czyUzycNatychmiast() = 0;
    virtual bool czyUzyc(Zolnierz* zolnierz)
    {
        return true;
    }
};

class Apteczka :public IPrzedmiot //Dziedziczenie
{
    static const int ILOSC_ZDROWIA = 20;
public:
    void uzyj(Zolnierz* z)
    {
        z->zdrowie(z->zdrowie() + ILOSC_ZDROWIA);
    }
    bool czyUzycNatychmiast()
    {
        return false;
    }
    bool czyUzyc(Zolnierz* zolnierz)
    {
        return zolnierz->zdrowie() < zolnierz->zdrowie() - 20;
    }

};

class Pozywienie :public IPrzedmiot
{
    static const int ILOSC_GLODU = 25;
public:
    void uzyj(Zolnierz* z)
    {
        z->glod(z->glod() + ILOSC_GLODU);
    }
    bool czyUzycNatychmiast()
    {
        return false;
    }
    bool czyUzyc(Zolnierz* zolnierz)
    {
        return zolnierz->glod() < 80;
    }
};

class Kamizelka :public IPrzedmiot
{
    static const int DODATKOWE_ZDROWIE = 40;
public:
    void uzyj(Zolnierz* z)
    {
        z->maxZdrowie(z->maxZdrowie() + DODATKOWE_ZDROWIE);
        z->zdrowie(z->zdrowie() + DODATKOWE_ZDROWIE);
    }
    bool czyUzycNatychmiast()
    {
        return true;
    }
};

class Buty :public IPrzedmiot
{
    static const int DODATKOWA_SZYBKOSC = 10;
public:
    void uzyj(Zolnierz* z)
    {
        z->szybkosc(z->szybkosc() + DODATKOWA_SZYBKOSC);
    }
    bool czyUzycNatychmiast()
    {
        return true;
    }
};

class Karabin :public IPrzedmiot
{
    static const int DODATKOWE_OBRAZENIA = 5;
public:
    void uzyj(Zolnierz* z)
    {
        z->obrazenia(z->obrazenia() + DODATKOWE_OBRAZENIA);
    }
    bool czyUzycNatychmiast()
    {
        return true;
    }
};

//IPrzedmiot.cpp
#include "IPrzedmiot.h"
//#include "Plansza.h"

#include <iostream>
#include <string>

using namespace std;

 

+1 głos
odpowiedź 12 czerwca 2021 przez adrian17 Ekspert (344,860 p.)
(osobna odpowiedź dla powiadomienia)

Po trzecie: błąd (po angielsku) oczywiście ma rację, masz dwie definicje tej samej klasy Apteczka - jedną w .cpp i jedną w .h. Poczytaj, w jaki sposób się definiuje klasy przy rozdzielaniu na pliki.

Podobne pytania

0 głosów
1 odpowiedź 1,801 wizyt
0 głosów
1 odpowiedź 142 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!

...