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

Błąd w kompilatorze przy dziedziczeniu publicznym z pojedynczej klasy

Object Storage Arubacloud
0 głosów
387 wizyt
pytanie zadane 2 czerwca 2017 w C i C++ przez Eryk Chojnacki Obywatel (1,420 p.)

Piszę taki kod:

main.cpp

#include <iostream>
#include <conio.h>
#include "Kółko i krzyżyk.h"
using namespace std;
int numergry=0;
int liczba;
class Gra
{
public:
    virtual void wyswietl()=0;
};
int main()
{
    cout << "Witaj!" << endl;
    cout<<"Wybierz minigrę: "<<endl;
    cout<<"1. Kolko i krzyzyk"<<endl;
    cout<<"2. Wkrotce";
    switch(liczba)
    {
        case 1:
           numergry=1;
        break;
        default:
            return false;
        break;
    }
    TicTacToe plansza1;
    Gra *wsk;
    if(numergry==1)
    {
        wsk=&plansza1;
        wsk->wyswietl();
    }

    return 0;
}

 

Kółko i krzyżyk.h (Tu jest błąd w linii, w której jest nawias otwierający klasę)

class TicTacToe :public Gra
{
private:
    char p1, p2, p3, p4, p5, p6, p7, p8, p9;
    char tura;
    int pomocnicza;
public:
    void wyswietl();
    void gra();
    void wygrana();
    void remis();
    void odnowa();
    TicTacToe(char p1='n',char p2='n',char p3='n',char p4='n',char p5='n',char p6='n',char p7='n',char p8='n',char p9='n',char tura='o', int pomocnicza=0);
    ~TicTacToe();
    friend class Gra;
};

 

Kółko i krzyżyk.cpp


#include <iostream>
#include <conio.h>
#include "Kółko i krzyżyk.h"
using namespace std;

void TicTacToe::wyswietl()
{
    cout<<"Kolko i krzyzyk!"<<endl;
    cout<<endl;
    cout<<p1<<"|"<<p2<<"|"<<p3<<endl;
    cout<<"- - -"<<endl;
    cout<<p4<<"|"<<p5<<"|"<<p6<<endl;
    cout<<"- - -"<<endl;
    cout<<p7<<"|"<<p8<<"|"<<p9<<endl;
}
void TicTacToe::gra()
{
    if(tura=='o')
    {
        cout<<"Kliknij numer pola";
        if(getch()=='1')
        {
            p1='o';
        }
        else if(getch()=='2')
        {
            p2='o';
        }
        else if(getch()=='3')
        {
            p3='o';
        }
        else if(getch()=='4')
        {
            p4='o';
        }
        else if(getch()=='5')
        {
            p5='o';
        }
        else if(getch()=='6')
        {
            p6='o';
        }
        else if(getch()=='7')
        {
            p7='o';
        }
        else if(getch()=='8')
        {
            p8='o';
        }
        else if(getch()=='9')
        {
            p9='o';
        }
        else
        {
            cout<<"Nieprawidłowy klawisz";
            TicTacToe::wyswietl();
        }
        TicTacToe::tura='x';
    }
    else
    {
        cout<<"Kliknij numer pola";
        if(getch()=='1')
        {
            p1='x';
        }
        else if(getch()=='2')
        {
            p2='o';
        }
        else if(getch()=='3')
        {
            p3='x';
        }
        else if(getch()=='4')
        {
            p4='x';
        }
        else if(getch()=='5')
        {
            p5='x';
        }
        else if(getch()=='6')
        {
            p6='x';
        }
        else if(getch()=='7')
        {
            p7='x';
        }
        else if(getch()=='8')
        {
            p8='x';
        }
        else if(getch()=='9')
        {
            p9='x';
        }
        else
        {
            cout<<"Nieprawidłowy klawisz";
            TicTacToe::wyswietl();
        }
        TicTacToe::tura='o';
    }
}
void TicTacToe::wygrana()
{
    if((p1='o' && p2==p1 && p3==p2) || (p4='o' && p5==p4 && p6==p5) || (p7='o' && p8==p7 && p9==p8 ) ||
       (p1='o' && p4==p1 && p7==p4) || (p2='o' && p5==p2 && p8==p5) || (p3='o' && p6==p3 && p9==p6) ||
       (p1='o' && p5==p1 && p9==p5) || (p3='o' && p5==p3 && p7==p5))
    {
        cout<<"Wygrywa kolko!";
        TicTacToe::pomocnicza=1;
        while(TicTacToe::pomocnicza==1)
        {
            if(getch()=='1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9')
            {
                p1='n'; p2='n'; p3='n'; p4='n'; p5='n'; p6='n'; p7='n'; p8='n'; p9='n';
            }
        }
    }
    if((p1='x' && p2==p1 && p3==p2) || (p4='x' && p5==p4 && p6==p5) || (p7='x' && p8==p7 && p9==p8 ) ||
       (p1='x' && p4==p1 && p7==p4) || (p2='x' && p5==p2 && p8==p5) || (p3='x' && p6==p3 && p9==p6) ||
       (p1='x' && p5==p1 && p9==p5) || (p3='x' && p5==p3 && p7==p5))
    {
        cout<<"Wygrywa krzyzyk!";
        TicTacToe::pomocnicza=1;
        while(TicTacToe::pomocnicza==1)
        {
            if(getch()=='1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9')
            {
                p1='n'; p2='n'; p3='n'; p4='n'; p5='n'; p6='n'; p7='n'; p8='n'; p9='n';
            }
        }
    }

}
void TicTacToe::remis()
{
    if(p1!='n'&& p1!='n'&& p2!='n'&& p3!='n'&& p4!='n'&& p5!='n'&& p6!='n'&& p7!='n'&& p8!='n'&& p9!='n' && TicTacToe::pomocnicza!=1)
    {
        cout<<"Remis!";
    }
}
void TicTacToe::odnowa()
{
    TicTacToe::wyswietl();
}

 

Błąd wyrzucany przez kompilator:

error: expected class-name before '{' token

 

W czym tkwi problem?

komentarz 2 czerwca 2017 przez Dexterim Dyskutant (8,370 p.)
Zmień nazwę pliku i nie używaj spacji. Dodaj dyrektywy zabezpieczające #ifndef

1 odpowiedź

0 głosów
odpowiedź 2 czerwca 2017 przez tangarr Mędrzec (154,860 p.)
1. Zmień nazwy plików na takie, które nie zawierają polskich znaków i spacji. Prosisz się tym tylko o kłopoty.

2. Klasa Gra nie jest dostępna w pliku "Kółko i krzyżyk.h"
komentarz 2 czerwca 2017 przez Eryk Chojnacki Obywatel (1,420 p.)
Kurczę, nie wiem o co chodzi z tą redefinicją
komentarz 2 czerwca 2017 przez tangarr Mędrzec (154,860 p.)

Musisz upewnić się, że podczas kompilacji plik gra.h będzie wczytany tylko raz.
Możesz to zrobić tak:

#ifndef __GRA_H__
#define __GRA_H__

class Gra
{
public:
    virtual void wyswietl()=0;
};

#endif

lub tak:
 

#pragma once

class Gra
{
public:
    virtual void wyswietl()=0;
};

 

komentarz 2 czerwca 2017 przez Eryk Chojnacki Obywatel (1,420 p.)

W mainie:


undefined reference to `TicTacToe::TicTacToe(char, char, char, char, char, char, char, char, char, char, int)'|
undefined reference to `TicTacToe::TicTacToe(char, char, char, char, char, char, char, char, char, char, int)'|
undefined reference to `TicTacToe::~TicTacToe()'|
undefined reference to `TicTacToe::~TicTacToe()'|
undefined reference to `TicTacToe::~TicTacToe()'|
error: ld returned 1 exit status

 

komentarz 2 czerwca 2017 przez tangarr Mędrzec (154,860 p.)
Napisałem to już wyżej.
Nie zaimplementowałeś tych metod. Masz tylko ich definicje w pliku nagłówkowym.
komentarz 2 czerwca 2017 przez Eryk Chojnacki Obywatel (1,420 p.)
||=== Build: Debug in Pomysł (compiler: GNU GCC Compiler) ===|
E:\Programy C++\Pomysł\main.cpp||In function 'int main()':|
E:\Programy C++\Pomysł\main.cpp|24|error: no matching function for call to 'TicTacToe::TicTacToe()'|
E:\Programy C++\Pomysł\main.cpp|24|note: candidates are:|
E:\Programy C++\Pomysł\TicTacToe.h|14|note: TicTacToe::TicTacToe(char, char, char, char, char, char, char, char, char, char, char, int)|
E:\Programy C++\Pomysł\TicTacToe.h|14|note:   candidate expects 12 arguments, 0 provided|
E:\Programy C++\Pomysł\TicTacToe.h|2|note: TicTacToe::TicTacToe(const TicTacToe&)|
E:\Programy C++\Pomysł\TicTacToe.h|2|note:   candidate expects 1 argument, 0 provided|
E:\Programy C++\Pomysł\main.cpp|25|error: no matching function for call to 'TicTacToe::TicTacToe()'|
E:\Programy C++\Pomysł\main.cpp|25|note: candidates are:|
E:\Programy C++\Pomysł\TicTacToe.h|14|note: TicTacToe::TicTacToe(char, char, char, char, char, char, char, char, char, char, char, int)|
E:\Programy C++\Pomysł\TicTacToe.h|14|note:   candidate expects 12 arguments, 0 provided|
E:\Programy C++\Pomysł\TicTacToe.h|2|note: TicTacToe::TicTacToe(const TicTacToe&)|
E:\Programy C++\Pomysł\TicTacToe.h|2|note:   candidate expects 1 argument, 0 provided|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
TicTacToe::TicTacToe(char p1,char p2,char p3,char p4,char p5,char p6,char p7,char p8,char p9,char tura, int pomocnicza)
{
    p1='n';p2='n';p3='n';p4='n';p5='n';p6='n';p7='n';p8='n';p9='n';
}

 

Podobne pytania

0 głosów
2 odpowiedzi 700 wizyt
pytanie zadane 29 marca 2016 w C i C++ przez Pablo99 Obywatel (1,110 p.)
0 głosów
1 odpowiedź 275 wizyt
pytanie zadane 4 maja 2015 w C i C++ przez Wirus Stary wyjadacz (14,000 p.)
0 głosów
1 odpowiedź 173 wizyt
pytanie zadane 17 kwietnia 2015 w C i C++ przez Adrian1999 Nałogowiec (34,570 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

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

...