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

Problem z dziedziczeniem

Ostatnio zmodyfikowano 2011-07-29 20:20
Autor Wiadomość
diego997
Temat założony przez niniejszego użytkownika
» 2011-07-29 01:08:11
Tematu w ogóle by nie było jak bym w klasie wpisał coś takiego:

C/C++
friend class Wrog_A;

//Dzięki temu nie wywala mi błedu jak dopiszę argument do funkcji

void Animacje_Anime_A( Wrog_A & wrog );
P-37504
diego997
Temat założony przez niniejszego użytkownika
» 2011-07-29 16:34:29
Eh wczoraj napisałem że wszystko działa. Jeżeli funkcji się nie rusza czyli jest takiej postaci:

C/C++
void Animacje::Animacje_Anime_A( Wrog_A * wrog )

To jest wszystko w porządku natomiast jak chcę skorzystać z argumentu czyli:

C/C++
void Animacje::Animacje_Anime_A( Wrog_A * wrog )
{
   
    wrog->Alien.Move( 0, 1 ); // Alien znajduje sie w klasie Wrog_A
   
}

To wyskakuje błąd

1>c:\documents and settings\maszyna\moje dokumenty\visual studio 2008\projects\warbladenew\warbladenew\animacje.cpp(13) : error C2027: use of undefined type 'Wrog_A'
1>        c:\documents and settings\maszyna\moje dokumenty\visual studio 2008\projects\warbladenew\warbladenew\animacje.h(17) : see declaration of 'Wrog_A'
1>c:\documents and settings\maszyna\moje dokumenty\visual studio 2008\projects\warbladenew\warbladenew\animacje.cpp(13) : error C2227: left of '->Alien' must point to class/struct/union/generic type
1>c:\documents and settings\maszyna\moje dokumenty\visual studio 2008\projects\warbladenew\warbladenew\animacje.cpp(13) : error C2228: left of '.Move' must have class/struct/union

Jeżeli już nie macie sił to nie odpisuje zrozumie, w ostateczności wszystko wrzucę do jednej klasy, a może z czasem coś wykombinuję
P-37552
kamillo121
» 2011-07-29 16:38:53
A dostarczasz deklaracji klasy Worg_A przy ciele metody ?
Najlepiej jednak by było gdybyś zapodał trochę kodu bo po twoich przemyśleniach nie wiem jak to zrobiłeś :)
P-37554
diego997
Temat założony przez niniejszego użytkownika
» 2011-07-29 16:47:33
C/C++
//Animacje.h ***************************************************
#ifndef Animacje_hpp
#define Animacje_hpp
#include <SFML/Graphics.hpp>
#include <iostream>
#include <time.h>

using namespace std;

class Animacje
{
   
public:
   
    friend class Wrog_A;
    int Blokada;
    float t;
   
    Animacje(); //Konstruktor
    void Animacje_Anime_A( Wrog_A * wrog );
   
};
#endif

//Enemy_A.h *******************************************************
#ifndef Enemy_A_hpp
#define Enemy_A_hpp

#include <SFML/Graphics.hpp>
#include <iostream>
#include <time.h>
#include "Animacje.h"
using namespace std;



class Wrog_A
    : public Animacje
{
   
   
   
public:
   
   
    sf::Shape Alien;
    float Wrog_A_Poz_x;
    float Wrog_A_Poz_y;
   
    vector < sf::Shape > Bullet;
   
    void Wrog_A_Tworzenie();
    void Wrog_A_StalaPozycja();
    void Wrog_A_Wyswietl( sf::RenderWindow & Okno_Glowne );
    void Wrog_A_AktualnaPozycja();
    void Wrog_A_Bullet_Tworzenie();
    void Wrog_A_Bullet_Shoot();
    void Wrog_A_Bullet_Wyswietl( sf::RenderWindow & Okno_Glowne );
    int Wrog_A_Random();
   
};
#endif

//Animacje.cpp ***********************************************************************
#include "Animacje.h"
#include <SFML/Graphics.hpp>
#include <iostream>
#include <conio.h>
#include <time.h>

using namespace std;


void Animacje::Animacje_Anime_A( Wrog_A * wrog )
{
    wrog->Alien.Move( 1, 1 ); //BEZ TEGO NIE MA BŁĘDU!!!!!
}

Animacje::Animacje()
{
    Blokada = 0;
    t = 0;
}


//Enemy_A.cpp ***********************************************************************
#include "Enemy_A.h"
#include <SFML/Graphics.hpp>
#include <iostream>
#include <conio.h>
#include <time.h>


using namespace std;

//Troche zamuje dlatego nie wysylam calosci, znajduja się tutaj same Definicje
P-37555
diego997
Temat założony przez niniejszego użytkownika
» 2011-07-29 18:33:33
Tutaj to ten sam błąd tylko w jednym pliku kod:

C/C++
#include <iostream>
#include <conio.h>
#include <string>
#include <time.h>

using namespace std;

class Marian;

class Dawid

{
   
public:
    bool Blokada;
   
    void funkcja( Marian * Obiekt )
    {
        Obiekt->liczba = 2; //Nie ma błędu gdy to dam w komentarz!!!
    }
   
   
   
};

class Marian
    : public Dawid
{
   
public:
   
    int liczba;
   
};


int main()
{
    Dawid Obiekt_Dawid;
   
    Marian Obiekt_Marian;
    Obiekt_Marian.liczba = 1;
   
   
    getch();
}


P.S Gdybym zrobił np Obiekt_Marian.Blokada = 1; To nie było by problemu tylko, że ja to muszę zrobić w funkcji i wtedy wywala błąd
P-37567
akwes
» 2011-07-29 18:48:50
No patrz, a mi działa.
C/C++
#include <iostream>
#include <conio.h>
#include <string>
#include <time.h>

using namespace std;


class Marian;
class Dawid

{
   
public:
    bool Blokada;
    void funkcja( Marian * );
   
   
};

class Marian
    : public Dawid
{
   
public:
   
    int liczba;
   
};

void Dawid::funkcja( Marian * Obiekt )
{
    Obiekt->liczba = 2; //Nie ma błędu.
}


int main()
{
    Dawid Obiekt_Dawid;
   
    Marian Obiekt_Marian;
    Obiekt_Marian.liczba = 1;
   
   
    getch();
}

Ładnie Ci kompilator pokazuje że źle używasz klasy Marian. Bo dla kompilatora wtedy, klasa marian to samo "class Marian;". Aby użyć danej zmiennej, musisz znać "ciało Mariana"... może to źle brzmi... ale to Ty tak nazwałeś klasy :P Także poznaj Mariana zanim zmienisz mu Dawidem.

I przy okazji, każda funkcja definiowana w ciele klasy to funkcja inline :P
P-37568
diego997
Temat założony przez niniejszego użytkownika
» 2011-07-29 19:05:16
No fakt już prawię się ucieszyłem ale jeszcze jedna rzecz zostałą.

Jeżeli uda do Obiekt_Marian przypisać Blokada = 1; jesteś mistrzem :)

I też w funkcji to zrobić czyli coś takiego Obiekt->Blokada = 1;
P-37569
akwes
» 2011-07-29 19:18:40
Czyli że konkretnie co :P ?
P-37570
1 2 3 4 « 5 » 6 7
Poprzednia strona Strona 5 z 7 Następna strona