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

Klasa Bazowa niezdefiniowana

Object Storage Arubacloud
0 głosów
1,708 wizyt
pytanie zadane 24 czerwca 2018 w C i C++ przez Asokus Początkujący (450 p.)

Wiecie dlaczego kompilator nie widzi mojej klasy bazowej? 

Klasa bazowa (wirtualna):

#pragma once
#include "stdafx.h"

class Game;

class Bonus
{
public:
	friend class BonusMenager;
	Bonus();
	virtual ~Bonus() = default;
	sf::Sprite obj;
	sf::Texture texture;
	sf::Vector2f gravity;
	sf::Vector2f moveVector;
	void update(float DetlaTime);
	void Draw(sf::RenderWindow & window);
	bool destTimer(float DeltaTime);
	bool getDestroyStatus();
	virtual void startAction() = 0;
	virtual void stopAction() = 0;
	virtual void action(float DeltaTime) = 0; // obsługa tego co się dzieje w trakcie akcji
protected:
	float destructionTimer;
	bool visibilyty;
	bool destructionStatus;
	Game* game;
};

Klasa Pochodna (jest zaznaczenie ze klasa Bonus się pojawi):

#pragma once
#include "stdafx.h"

class Game;
class Bonus;

class PaddleStick :
	public virtual Bonus
{
public:
	PaddleStick(Game* ga, float x, float  y);
	virtual ~PaddleStick() = default;
	void action(float DeltaTime);
	void startAction();
	void stopAction();
};

dodatko w stdafx Bonus.h jest przed PaddleStick.h:

// stdafx.h: dołącz plik do standardowych systemowych plików dołączanych,
// lub specyficzne dla projektu pliki dołączane, które są często wykorzystywane, ale
// są rzadko zmieniane
//

#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>
#include <thread>
#include <iostream>
#include <list>
#include <iterator>
#include <string>
#include <sstream>



// TODO: W tym miejscu odwołaj się do dodatkowych nagłówków wymaganych przez program


#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/Audio.hpp>
#include "Game.h"
#include "Player.h"
#include "Ball.h"
#include "SlabMenager.h"
#include "Slab.h"
#include "Bonus.h"
#include "BonusMenager.h"
#include "BallMultipler.h"
#include "PaddleShrink.h"
#include "PaddleShuter.h"
#include "PaddleStick.h"
#include "PaddleTenter.h"
#include "SpeedAccelerant.h"

Nie wiem czy to ma znaczenie ale w konstruktorze PaddleStick korzystam z konstruktora klasy bazowej (wcześniej nie korzystałem i też nie widział Bazowej):

#include "PaddleStick.h"


PaddleStick::PaddleStick(Game * ga, float x, float  y) : Bonus()
{
	game = ga;
	texture.loadFromFile("PaddleStick.png");
	obj.setTexture(texture);
	obj.setOrigin(obj.getLocalBounds().width / 2, obj.getLocalBounds().height / 2);
	obj.setPosition(x, y);
}

void PaddleStick::action(float DeltaTime)
{
}

void PaddleStick::startAction()
{
}

void PaddleStick::stopAction()
{
}

i konstruktor klasy bazowej:

Bonus::Bonus()
{
	gravity = sf::Vector2f{ 0.0f, 20 };
	moveVector = sf::Vector2f{ 0.0f, -50.0f };
	destructionTimer = float{ 4.0f };
	visibilyty = bool{ true };
	destructionStatus = bool{ false };
}

Kompilator wyrzuca taki błąd "class": klasa podstawowa niezdefiniowana". Dodam, że gdy przerzucę Bonus.h w nieprawidłowe miejsce (za klasy pochodne) w stdaxf.h to błędów jest kilkadziesiąt razy więcej. Nie jest to dziwne ale może pomoże.

Link do całego projektu github:

https://github.com/Blauto/2d_Game/tree/master/Arcanoid/Arcanoid

Dziękuję za pomoc!

komentarz 24 czerwca 2018 przez j23 Mędrzec (194,920 p.)

Jaki jest sens dodawać do stdafx.h własne nagłówki, wiedząc, że w trakcie pisania projektu może się coś w nich zmienić?

komentarz 24 czerwca 2018 przez Asokus Początkujący (450 p.)
żeby nie pisać "listy" potrzebnych klass za każdym razem, tylko stdafx na początku i nic więcej, a potem nowe klasy wrzucać do stdafx.h. Nie wiem czy dobrze zrozumiałem pytanie. Po prostu zawsze tak robiłem i działało, myślałem że można, a teraz się VC postawił.
komentarz 24 czerwca 2018 przez j23 Mędrzec (194,920 p.)
Ok, tylko jak dasz tam nagłówki, które zmieniasz dosyć często, to całą idee prekompilacji nagłówków szlag trafia, a przecież po to ten plik jest. Też powiedzmy sobie szczerze: ten twój projekt nie jest aż tak duży, żebyś musiał robić jakiś jeden zbiorczy nagłówek załączający wszystko.

1 odpowiedź

+1 głos
odpowiedź 24 czerwca 2018 przez criss Mędrzec (172,590 p.)
wybrane 24 czerwca 2018 przez Asokus
 
Najlepsza
Nie możesz dziedziczyć z niezdefiniowanej klasy i dokładnie to mówi ci kompilator. Bo.. na jakiej zasadzie miałoby odbyć się dziedziczenie skoro nie wiadomo jak wygląda klasa bazowa?
1
komentarz 24 czerwca 2018 przez mokrowski Mędrzec (155,460 p.)

"Obiema ręcyma" się podpisuję...

Najlepiej kompletnie wywal stdafx i wyłącz precompiled headers (po polsku chyba "prekompilowane nagłówki") w ustawieniach projektu, bo to więcej problemów robi niż z tego pożytku

WIęcej zyskasz prawidłowo dzieląc program i wykonując budowę wielowątkowo/wieloprocesowo. Przynajmniej na początkowym etapie zanim nie wyłonią się Ci kandydaci na takie nagłówki. A później sobie sprawdzisz czy warto.. 

komentarz 24 czerwca 2018 przez Asokus Początkujący (450 p.)
Ale zrobiłem tak jak napisałeś dokładnie, i dalej są te same błędy. Kompletnie tego nie rozumiem... do jest jak 2 + 2 ~= 4 dla visuala chyba robię reinstal bo już nie  wiem  o co chodzi z tym stare projekty przestały mi się kompilować nawet...
komentarz 24 czerwca 2018 przez mokrowski Mędrzec (155,460 p.)
Ładnie go wyłącz (VS). Zrób restart systemu i dopiero sprawdź czy stare projekty się kompilują. Jeśli nie to ustawiłeś coś co destabilizuje budowę wszystkich projektów. W menu chyba (z pamięci) Tools -> Import and Export Settings masz opcję resetu wszystkich ustawień. Nie reinstaluj bez potrzeby!
1
komentarz 24 czerwca 2018 przez criss Mędrzec (172,590 p.)
Masz tzw. circular dependency. Tzn. plik A includuje plik B, plik B includuje plik A. Wywal #include "Game.h" z Bonus.h (nie potrzebujesz definicji klasy Game żeby zadeklarować na nią wskaźnik) i daj tego includa w Bonus.cpp. Jeśli podobne problemy będą się działy, to szukaj circular dependency. Generalnie najlepiej jakby możliwie najwięcej #includów było w pliakch .cpp, skracasz w ten sposob czas kompilacji i pozbywasz się możliwości stworzenia chorego drzewa zależności z którego wychodzą takie kwiatki
komentarz 24 czerwca 2018 przez Asokus Początkujący (450 p.)
Dziękuje teraz rozumiem, nie zdawałem sobie sprawy z możliwości wystąpienia takiego problemu, dziękuję za rady, będę stosował, jeszcze raz dziękuję za pomoc!

Podobne pytania

0 głosów
0 odpowiedzi 81 wizyt
pytanie zadane 11 lutego 2021 w Sprzęt komputerowy przez koleś34 Gaduła (3,270 p.)
0 głosów
2 odpowiedzi 199 wizyt
pytanie zadane 11 stycznia 2021 w C i C++ przez szymonkozy Nowicjusz (140 p.)
0 głosów
1 odpowiedź 88 wizyt
pytanie zadane 8 października 2020 w Systemy operacyjne, programy przez Programmingc100 Bywalec (2,620 p.)

92,546 zapytań

141,387 odpowiedzi

319,503 komentarzy

61,930 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!

...