(nazwa klasy) Does not name a type

0

Mam taką sytuację:

struct Foo
{
    struct A
    {
        //rzeczy
    };

    struct B : public A
    {
        //rzeczy
    };

    struct C : public A
    {
        //rzeczy
    };

    struct D : public A
    {
        //rzeczy
    };

    union
    {
        B barB;
        C barC;
        D barD;
    };
};

Kiedy próbuję to skompilować, otrzymuję informację że A, B i C nie nazywają typu. Przeanalizowałem kod i wydaje mi się poprawny. Wie ktoś, o co chodzi?

0

Kurde, teraz całkiem zgłupiałem. Przed całością znadują się jeszcze dwa enumy, które pominąłem w przykładzie bo uznałem je za nieistotne. Sprawdziłem jak wpływają na program i nie rozumiem.
Najpierw spróbowałem usunąć je z kodu, kompilowało się świetnie. Następnie je przywróciłem i wkleiłem na tę stronę co podałeś, zgodnie z przewidywaniami pojawiał się błąd. Skasowałem znowu te enumy i napisałem jakieś przykładowe, kompilowało się. U mnie również. Skopiowałem jeszcze w miejsce tych przykładowych enumów na stronie enumy z mojego kodu i też śmigało. W CodeBlocksie nadal nie.
Spróbowałem jeszcze wkleić na stronę znowu te działające przykłady i je przepisać na to co mam w kodzie, wtedy przestały działać. przynajmniej póki trzymałem nazwy klas z mojego kodu, po zmianie na A, B, C, D, ładnie się skompilowało. Nazwy w kodzie mam napisane dobrze, sprawdzałem parę razy. No i warto zaznaczyć że kod kompilował się z tymi nazwami dopóki miał foobarowe enumy.
To jest z mojego kodu:

enum ComponentType
{
    None,
    Window,
    Line,
    Button,
    Text
};

enum PositionType
{
    Free,
    Right,
    Left,
    Up,
    Down
};

To są przykładowe:

enum Foobar
{
    Bar1,
    Bar2,
    Bar3
 };
    
enum Barfoo
{
    Foo1,
    Foo2,
    Foo3
 };

Dla mnie wyglądają tak samo, a jednak coś się chrzani przy tym pierwszym. To jest całość: (w miejsce enumów wstaw dowolne z powyższych)

struct Foo
{
    enum Foobar
    {
        Bar1,
        Bar2,
        Bar3
    };
    
    enum Barfoo
    {
        Foo1,
        Foo2,
        Foo3
    };

    struct A
    {
    
    };

    struct B : public A
    {

    };

    struct C : public A
    {

    };

    struct D : public A
    {

    };

    union
    {
        B barB;
        C barC;
        D barD;
    };
};
0

To wklej cały niedziałający przykład, szklana kula jest na feriach. https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/

0

No streszczając to co napisałem wyżej, to się nie kompiluje:

struct ScreenComponent
{
    enum ComponentType
    {
        None,
        Window,
        Line,
        Button,
        Text
    };

    enum PositionType
    {
        Free,
        Right,
        Left,
        Up,
        Down
    };

    struct Component
    {

    };

    struct Window : public Component
    {

    };

    struct Line : public Component
    {

    };

    struct Button : public Component
    {

    };

    struct Text : public Component
    {

    };

    ComponentType type;

    union
    {
        Window win;
        Line   line;
        Button butt;
        Text   text;
    };
};

To się kompiluje:

struct ScreenComponent
{
    enum Foo
    {
        Bar1,
        Bar2,
        Bar3,
        Bar4
    };
    
    enum Bar
    {
        Foo1,
        Doo2,
        Foo3,
        Foo4
    };

    struct Component
    {

    };

    struct Window : public Component
    {

    };

    struct Line : public Component
    {

    };

    struct Button : public Component
    {

    };

    struct Text : public Component
    {

    };

    union
    {
        Window win;
        Line   line;
        Button butt;
        Text   text;
    };
};

I to również się kompiluje:

struct ScreenComponent
{
    enum ComponentType
    {
        None,
        Window,
        Line,
        Button,
        Text
    };

    enum PositionType
    {
        Free,
        Right,
        Left,
        Up,
        Down
    };

    struct A
    {

    };

    struct B : public A
    {

    };

    struct C : public A
    {

    };

    struct D : public A
    {

    };

    struct E : public A
    {

    };

    union
    {
        B barB;
        C barC;
        D barD;
        E barE;
    };
};
0

W skrócie, to się nie kompiluje:

struct foo
{
    enum Foo { bar };
    struct bar {};
    
    bar b;
};

Rozwiązanie: użyj

  • enum class, lub
  • elaborated type specifiera (struct bar b; w przykładzie), lub
  • nie przesłaniaj nazw.
0

Masz kolizję nazw Window.

0

O kurde faktycznie, dzięki

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