Avatar
petr.dar
Člen
Avatar
petr.dar:

čau lidi, nevěděli by jste proč mi to nebere enumelátor ve třídě? Přikládám kód, kterej sem zjednodušil co nejvíc to šlo:

v main nic nejni:

#include <iostream>
#include "myclass.h"
using namespace std;
int main()
{
    MyClass MClass;
    return 0;
}

třída MyClass:

#ifndef MYCLASS_H
#define MYCLASS_H
#include "sachFigury.h"
class sachFigury;
struct figura;
enum barva_figury;
class MyClass
{
public:
    MyClass();
    ~MyClass();
    void struktura(figura F); // proč struktura jde deklarovat
    void enumer(barva_figury F); // ale enum barva_figury nelze deklarovat
private:
    sachFigury * sF;
};

#endif // MYCLASS_H

a definice

#include "myclass.h"
MyClass::MyClass()
{
    sF = new sachFigury(this);
}

MyClass::~MyClass()
{
    delete sF;
}

void MyClass::struktura(figura F)
{
}
void MyClass::enumer(barva_figury F)
{
}

a třída sachFigury

#ifndef SACHFIGURY_H
#define SACHFIGURY_H
#include "myclass.h"
class MyClass;
enum barva_figury {white,black};
enum figury {dama,vez,strelec,kun,kral,pech,nic};
struct figura
{
    figury figurka;
    barva_figury barva;
};
class sachFigury
{
public:
    sachFigury(MyClass * mc = 0);
    ~sachFigury();
private:
    MyClass * myClass;
};

#endif // SACHFIGURY_H

a definice:

#include "sachFigury.h"
sachFigury::sachFigury(MyClass *mc)
    :myClass(mc)
{}
sachFigury::~sachFigury()
{}

Proč mi nelze deklarovat enum, ale struktura jde v poho?

 
Odpovědět 27. června 6:48
Avatar
B42P6
Člen
Avatar
Odpovídá na petr.dar
B42P6:

Problem je v tom ze enum nieje mozne forward-deklarovat (neviem ako sa to preklada), forward-deklaracia je deklaracia pri ktorej nieje definicia:

class A; //forward-deklaracia triedy A

//[...]

class A // definicia triedy A
{
    //[...]
};

Ako som uz spomenul enum nieje mozne forward-deklarovat:

enum A; // chyba, enum nieje mozne forward-deklarovat

enum A
{
  //[...]
};

Ak niekoho bude zaujimat Preco to nieje mozne: http://stackoverflow.com/q/71416/4932834

Naviac tam je tiez spomenute ze v C++11 to uz mozne je a ako to dosiahnut.

Spat k tvojmu problemu, troska nerozumies deklaraciam a definiciam, kazda definicia je zaroven aj deklaracia takze tym ze tam mas

#include "sachFigury.h"

v ktorom je enum barva_figury, riadok

enum barva_figury;

je nepotrebny, odstran ho a mas po problemoch. To iste plati aj pre ostatne deklaracie v tvojom kode:

class sachFigury;
struct figura;
class MyClass;

ktore su tiez nepotrebne.

Dufam ze sa na mna pismenka pre dlzne a makcene nehnevaju kedze mam anglicku klavestnicu.

Nahoru Odpovědět  +1 27. června 11:34
'long long long' is too long for GCC
Avatar
B42P6
Člen
Avatar
Nahoru Odpovědět 27. června 12:17
'long long long' is too long for GCC
Avatar
Odpovídá na B42P6
Libor Šimo (libcosenior):

Myslím, že forward v tomto prípade znamená globálna.

Nahoru Odpovědět 27. června 13:21
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
B42P6
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
B42P6:

Nie celkom :), forward-declaration je len dekláracia bez definície, nezáleží na tom kde je umiestnená:

int f()
{
        class A;
}

class A
{
        //[...]
};

.

Nahoru Odpovědět 27. června 14:06
'long long long' is too long for GCC
Avatar
Odpovídá na B42P6
Libor Šimo (libcosenior):

Otazka je, k comu je to dobre.
Chapem, ak je to v hlavickovych suboroch, ale inde nevidim zmysel.
Prevazne sa zaujimam o cecko, nie c++, tam je to asi ine.

Nahoru Odpovědět 27. června 18:45
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
petr.dar
Člen
Avatar
Odpovídá na B42P6
petr.dar:

nene, když smažu

enum barva_figury;

problém se nevyřeší.

A když smažu

class sachFigury;

nebude to vědět co je sachFigury - další chyba, a to samé platí i o

struct figura;

No nic, už jsem se smířil s tim že to deklarovat nejde, nerozumim tomu proč, nedává to logiku, akorád musim kvůli tomu svůj projekt trochu přeorganizovat.

 
Nahoru Odpovědět 28. června 1:25
Avatar
martanec
Člen
Avatar
martanec:

v subore sachFigury.h include-ujes myclass.h a v subore myclass.h include-ujes sachFigury.h ... to asi nebude v poriadku s kostolnym poriadkom. Ked este k tomu pridas fakt, ze v kazdom hlavickovom subore mas deklaraciu enumu aj triedy (ci uz doprednu, alebo nie), tak sa ani necudujem, ze dostavas error...
Dost mozne, ze sa mylim. No v kazdom pripade by si sem mohol post-nut error, ktory dostavas.

 
Nahoru Odpovědět 28. června 8:55
Avatar
petr.dar
Člen
Avatar
Odpovídá na martanec
petr.dar:

No, includuju to, protože to všechno používám :-) když to všechno smažu, taky mi to hází error, nebo vám to bez toho funguje? Nevim jak bych to měl napsat lépe.

 
Nahoru Odpovědět 28. června 23:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.