Circular main <- main.o dependency dropped.

0

Napisałem prościutką grę (wszystko działało) i jako zadanie dodatkowe dostałem zamknąć całość w jednej klasie tak aby sama gra była obiektem. Niestety program się nie kompiluje wywalając error z tytułu. Nie wiem czy w ogóle dobrze do tego podchodze bo pomysłem było zwyczjane wstawienie działającego kodu jako metody klasy gra. Jak to rozwiązać?

Główny plik projektu:

#include <cstdlib>
#include <iostream>
#include <windows.h>
#include "pole.h" 
#include "niespodzianka.h" 
#include "kara.h" 
#include "dopalacz.h" 
#include "zwykle.h" 
using namespace std;

void gotoxy(int x, int y)
{
COORD cord;
cord.X = x;
cord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cord);
}

void intro() {
     cout << endl << endl << endl << "                                    Alkochinczyk" << endl << endl;
     cout << "                                   wersja 0.1 BETA";
     cout << endl << endl << "                              Trwa wczytywanie tekstur" << endl;
     for (int pauza=1;pauza<=80;pauza++)
     {
     cout << ".";
     Sleep(50);
     }
     system("cls");
}

#include "gra.h"

int main() 
{
    gra nowa;
    nowa.gra();
    return 0;
}
 

Klasa gra: (Klasy dopalacz pole itp to klasy odpowiadające za obsługę pól których nie modyfikowałem względem działającego porgramu)

#ifndef _gra_h_
#define _gra_h_
class gra 
{

public:
 
pole* p[50];
int a=1, b=1, c=1, d=1;

int gra()
{
int zy=0,i,j,zx=0,pomoc=0,kostka, wybor=1, pomoc2=1;
char nazwa1[30], nazwa2[30], nazwa3[30], nazwa4[30];
cout << "Podaj nazwy graczy (maks 30 znakow)." << endl << endl; // wprowadzanie nazw graczy
          cout << "Gracz A: "; cin >> nazwa1;
          cout << endl << "Gracz B: "; cin >> nazwa2;
          cout << endl << "Gracz C: "; cin >> nazwa3;
          cout << endl << "Gracz D: "; cin >> nazwa4;
          system("cls");
          
poleZwykle* ppocz = new poleZwykle;
poleZwykle* pkon = new poleZwykle; 


for(i=2;i<50;i++)   // Nadanie polom konkretnych typow
{
    if (i%10==0)
    {
                poleZwykle* pz = new poleZwykle;
                p[i]=pz;
    }
    else if  (i%10==9) 
    {
             poleKara* pk = new poleKara;
             p[i]=pk;
    }
    else if (i%10==8) 
    {
         poleDopalacz* pd = new poleDopalacz;
         p[i]=pd;
    }
    else 
    {
         poleNiespodzianka* pn = new poleNiespodzianka;
         p[i]=pn;
    }
}    
p[1]=ppocz;
p[50]=pkon;
p[1]->pocz(); // ustawienie pionkow na pierwszysm polu
 
for (i=1;i<51;i++) // wpisywanie wartosci pol
        {
        p[i]->wprowWartosc(i);
        }
for(j=1;j<6;j++) // ustalanie polozenia poszczegolnych pol
{
for (i=1;i<11;i++)
        {
        p[i+pomoc]->wprowX(zx);
        zx=zx+5;
        p[i+pomoc]->wprowY(zy);
        }
zy=zy+4;
zx=0;
pomoc=pomoc+10;
}

int kolejka=1; // kolejka jest zmienna warunkujaca ktory pionek sie rusza

while(!wybor==0) // glowna petla programu
{
srand(time(NULL));
kostka=rand() % 6;


if (kolejka%4==1)  // wybór który gracz sie przesuwa i kosekwencje
{
p[a]->wprowP1(0); // pole na ktorym stal jest informowane ze pionek juz na nim nie stoi
a=a+kostka+1;     // zmienna która pamięta na którym polu jest pionek.
if (a>=50)
{
           system("cls");
           gotoxy(15,8);
           cout << nazwa1 << " WYGRYWA!!!!!!!!!!!!";
           gotoxy(15,10);
           cout << "Dziekujemy za gre! Na zdrowie!";
           gotoxy(0,20);
           system("pause");
           return 0;
}
p[a]->wprowP1(1); // nowe pole jest informowane ze ztanal na nim pionek.
p[a]->zadanie();  // wyswietlane jest zadanie lub informacja
p[a]->dzialanie(1); // wykonywane jest dzialanie (jesli zachodzi)
gotoxy(55,15);       // wyswietlenie informacji o kolejce graczy
cout << "Aktualna kolejka " << nazwa1;
gotoxy(55,16);
cout << "Nastepny gracz " << nazwa2;
}
else if (kolejka%4==2)
{
p[b]->wprowP2(0);
b=b+kostka+1;
if (b>=50)
{
           system("cls");
           gotoxy(15,8);
           cout << nazwa2 << " WYGRYWA!!!!!!!!!!!!";
           gotoxy(15,10);
           cout << "Dziekujemy za gre! Na zdrowie!";
           gotoxy(0,20);
           system("pause");
           return 0;
}
p[b]->wprowP2(1);
p[b]->zadanie();
p[b]->dzialanie(2);
gotoxy(55,15);
cout << "Aktualna kolejka " << nazwa2;
gotoxy(55,16);
cout << "Nastepny gracz " << nazwa3;
}
else if (kolejka%4==3)
{
p[c]->wprowP3(0);
c=c+kostka+1;
if (c>=50)
{
           system("cls");
           gotoxy(15,8);
           cout << nazwa3 << " WYGRYWA!!!!!!!!!!!!";
           gotoxy(15,10);
           cout << "Dziekujemy za gre! Na zdrowie!";
           gotoxy(0,20);
           system("pause");
           return 0;
}
p[c]->wprowP3(1); 
p[c]->zadanie(); 
p[c]->dzialanie(3); 
gotoxy(55,15);
cout << "Aktualna kolejka " << nazwa3;
gotoxy(55,16);
cout << "Nastepny gracz " << nazwa4;
}
else
{
p[d]->wprowP4(0);
d=d+kostka+1;
if (d>=50)
{
           system("cls");
           gotoxy(15,8);
           cout << nazwa4 << " WYGRYWA!!!!!!!!!!!!";
           gotoxy(15,10);
           cout << "Dziekujemy za gre! Na zdrowie!";
           gotoxy(0,20);
           system("pause");
           return 0;
}
p[d]->wprowP4(1);
p[d]->zadanie();
p[d]->dzialanie(0);  
gotoxy(55,15);
cout << "Aktualna kolejka " << nazwa4;
gotoxy(55,16);
cout << "Nastepny gracz " << nazwa1; 
}
           
           
kolejka=kolejka+1; // wyswietlenie pol

    for (i=1;i<51;i++)
        {
        p[i]->rysuj();
        }

gotoxy(0,23); // wyswietlenie reszty danych
cout << "Alkochinczyk wersja o.1 BeTa";

gotoxy(55,2);
cout <<  "Kostka: " <<  kostka+1;
gotoxy(55,4);
cout << "0 - wyjscie";
gotoxy(55,5);
cout << "1 - dalej";
gotoxy(55,6);
cout << "Wybor: ";

cin >> wybor;
system("cls");
}   
return 0;          
};
#endif

 
0

Nie wiem czy to to, ale spróbuj przemianować metodę gra() na start() bo może się pluje o niewłaściwą deklarację konstruktora.

BTW
Ja praktykuję nazywanie klas z dużej litery a metod z małej, lepiej wtedy widać czy to klasa czy metoda.

0

Zmiana nazwy niestety nie przyniosła żadnych efektów ;/ Ktoś ma jakiś inny pomysł??

Zastanawiam się czy to nie jest po prostu za bardzo złożone bo metoda klasy gra deklaruje tablice obiektów typu który dziedziczy z typu pole ;P

0

Przywiązuj większą uwagę do formatowania kodu, wyjście z astyle'a:

 #ifndef _gra_h_
#define _gra_h_
class gra
{

public:

    pole* p[50];
    int a=1, b=1, c=1, d=1;

    int gra()
    {
        int zy=0,i,j,zx=0,pomoc=0,kostka, wybor=1, pomoc2=1;
        char nazwa1[30], nazwa2[30], nazwa3[30], nazwa4[30];
        cout << "Podaj nazwy graczy (maks 30 znakow)." << endl << endl; // wprowadzanie nazw graczy
        cout << "Gracz A: ";
        cin >> nazwa1;
        cout << endl << "Gracz B: ";
        cin >> nazwa2;
        cout << endl << "Gracz C: ";
        cin >> nazwa3;
        cout << endl << "Gracz D: ";
        cin >> nazwa4;
        system("cls");

        poleZwykle* ppocz = new poleZwykle;
        poleZwykle* pkon = new poleZwykle;


        for(i=2; i<50; i++) // Nadanie polom konkretnych typow
        {
            if (i%10==0)
            {
                poleZwykle* pz = new poleZwykle;
                p[i]=pz;
            }
            else if  (i%10==9)
            {
                poleKara* pk = new poleKara;
                p[i]=pk;
            }
            else if (i%10==8)
            {
                poleDopalacz* pd = new poleDopalacz;
                p[i]=pd;
            }
            else
            {
                poleNiespodzianka* pn = new poleNiespodzianka;
                p[i]=pn;
            }
        }
        p[1]=ppocz;
        p[50]=pkon;
        p[1]->pocz(); // ustawienie pionkow na pierwszysm polu

        for (i=1; i<51; i++) // wpisywanie wartosci pol
        {
            p[i]->wprowWartosc(i);
        }
        for(j=1; j<6; j++) // ustalanie polozenia poszczegolnych pol
        {
            for (i=1; i<11; i++)
            {
                p[i+pomoc]->wprowX(zx);
                zx=zx+5;
                p[i+pomoc]->wprowY(zy);
            }
            zy=zy+4;
            zx=0;
            pomoc=pomoc+10;
        }

        int kolejka=1; // kolejka jest zmienna warunkujaca ktory pionek sie rusza

        while(!wybor==0) // glowna petla programu
        {
            srand(time(NULL));
            kostka=rand() % 6;


            if (kolejka%4==1)  // wybór który gracz sie przesuwa i kosekwencje
            {
                p[a]->wprowP1(0); // pole na ktorym stal jest informowane ze pionek juz na nim nie stoi
                a=a+kostka+1;     // zmienna która pamiÄta na którym polu jest pionek.
                if (a>=50)
                {
                    system("cls");
                    gotoxy(15,8);
                    cout << nazwa1 << " WYGRYWA!!!!!!!!!!!!";
                    gotoxy(15,10);
                    cout << "Dziekujemy za gre! Na zdrowie!";
                    gotoxy(0,20);
                    system("pause");
                    return 0;
                }
                p[a]->wprowP1(1); // nowe pole jest informowane ze ztanal na nim pionek.
                p[a]->zadanie();  // wyswietlane jest zadanie lub informacja
                p[a]->dzialanie(1); // wykonywane jest dzialanie (jesli zachodzi)
                gotoxy(55,15);       // wyswietlenie informacji o kolejce graczy
                cout << "Aktualna kolejka " << nazwa1;
                gotoxy(55,16);
                cout << "Nastepny gracz " << nazwa2;
            }
            else if (kolejka%4==2)
            {
                p[b]->wprowP2(0);
                b=b+kostka+1;
                if (b>=50)
                {
                    system("cls");
                    gotoxy(15,8);
                    cout << nazwa2 << " WYGRYWA!!!!!!!!!!!!";
                    gotoxy(15,10);
                    cout << "Dziekujemy za gre! Na zdrowie!";
                    gotoxy(0,20);
                    system("pause");
                    return 0;
                }
                p[b]->wprowP2(1);
                p[b]->zadanie();
                p[b]->dzialanie(2);
                gotoxy(55,15);
                cout << "Aktualna kolejka " << nazwa2;
                gotoxy(55,16);
                cout << "Nastepny gracz " << nazwa3;
            }
            else if (kolejka%4==3)
            {
                p[c]->wprowP3(0);
                c=c+kostka+1;
                if (c>=50)
                {
                    system("cls");
                    gotoxy(15,8);
                    cout << nazwa3 << " WYGRYWA!!!!!!!!!!!!";
                    gotoxy(15,10);
                    cout << "Dziekujemy za gre! Na zdrowie!";
                    gotoxy(0,20);
                    system("pause");
                    return 0;
                }
                p[c]->wprowP3(1);
                p[c]->zadanie();
                p[c]->dzialanie(3);
                gotoxy(55,15);
                cout << "Aktualna kolejka " << nazwa3;
                gotoxy(55,16);
                cout << "Nastepny gracz " << nazwa4;
            }
            else
            {
                p[d]->wprowP4(0);
                d=d+kostka+1;
                if (d>=50)
                {
                    system("cls");
                    gotoxy(15,8);
                    cout << nazwa4 << " WYGRYWA!!!!!!!!!!!!";
                    gotoxy(15,10);
                    cout << "Dziekujemy za gre! Na zdrowie!";
                    gotoxy(0,20);
                    system("pause");
                    return 0;
                }
                p[d]->wprowP4(1);
                p[d]->zadanie();
                p[d]->dzialanie(0);
                gotoxy(55,15);
                cout << "Aktualna kolejka " << nazwa4;
                gotoxy(55,16);
                cout << "Nastepny gracz " << nazwa1;
            }


            kolejka=kolejka+1; // wyswietlenie pol

            for (i=1; i<51; i++)
            {
                p[i]->rysuj();
            }

            gotoxy(0,23); // wyswietlenie reszty danych
            cout << "Alkochinczyk wersja o.1 BeTa";

            gotoxy(55,2);
            cout <<  "Kostka: " <<  kostka+1;
            gotoxy(55,4);
            cout << "0 - wyjscie";
            gotoxy(55,5);
            cout << "1 - dalej";
            gotoxy(55,6);
            cout << "Wybor: ";

            cin >> wybor;
            system("cls");
        }
        return 0;
    };
#endif

1 użytkowników online, w tym zalogowanych: 0, gości: 1