extern a enum

0

Hej,

to znowu ja. Może i tym razem pomożecie ;) Muszę szybko dokończyć soft do mgr i mnie wykańcza :(

Mam problem z przekazywaniem zmiennej typu enum. W pliku main.h deklaruję zmienną:

enum OSOBA (LEKARZ = 1, PACJENT) uzytkownik;

w pliku main.cpp używam jej bez problemów. W pliku trasy.h deklaruję ją:

extern enum OSOBA (LEKARZ = 1, PACJENT) uzytk;

ale ja próbuję jej użyć w trasy.cpp, tak samo jak w main.cpp:

uzytk = LEKARZ;

to dostaję błąd: Unresolved external '_uzytk' referenced from TRASY.OBJ.

Jak to naprawić? Ktoś podpowie?

Pozdrawiam i dziękuję z góry za poświęcony czas.
Mal

0

A poważnie potrzbujesz tutaj tej zmiennej jako globalnej?

0

chyba powinno to wyglądać nieco inaczej. Przede wszystkim (nie '(' tylko '{')

enum Osoba { lekarz = 1, pacjent } uzytkownik;
Osoba uztyk;

Po drugie przeczytaj ten artykuł na temat słowa kluczowego extern
http://4programmers.net/C/Extern

0

Zmienną globalną potrzebuję. Mogłabym zamiast zmiennej globalnej stworzyć osobną klasę, ale jeszcze się przed tym wzbraniam, bo za dużo zmian w już zrobionym kodzie chyba musiałabym wprowadzać... Zresztą w klasach w ogóle nie czuję się zbyt pewnie :/

Jeśli chodzi o nawias, to racja. Literówka popełniona tutaj. W kodzie się zgadza. Przepraszam.

Wydawało mi się, że mogą być dwa równoważne zapisy:

enum OSOBA {PACJENT, LEKARZ};
OSOBA uzytkownik;

oraz

enum OSOBA {PACJENT, LEKARZ} uzytkownik;

oba te sposoby deklaracji u mnie działały razem z późniejszym przypisaniem

uzytkownik = PACJENT;

Problem pojawił się przy próbie wyeksportowania tej zmiennej do innego pliku. Artykuł przeczytałam. Korzystałam już z extern przy okazji funkcji globalnych i zmiennych innych typów. Ale chyba za mało cały czas wiem na temat działania typu enum, żeby informacje z artykułu przełożyć na swój program. Choć nie ukrywam kombinowałam na wszystkie sposoby.

Mal.

0

Ach, no i w pierwszym poście popełniłam błąd raz używając nazwy zmiennej uzytk, a zaraz potem uzytkownik. To mój błąd tutaj, przepraszam za bałagan. Chodzi oczywiście o jedną i tą samą zmienną uzytkownik.

0

A stworzyłaś projekt czy to są dwa oddzielne pliki .cpp?

0

Stworzyłam projekt. Kompilował się ładnie dopóki nie poczułam potrzeby użycia zmiennej enum z main.cpp w trasy.cpp.

0

Dołącz plik nagłówkowy trasy.h zarówno do trasy.cpp jak i do main.cpp. Nie powinno być z tym problemów

0

Mam dołączony i tu i tu od samego początku.

0

W trasy.h powinnaś mieć:

// dolaczenie definicji typu OSOBA
#include "main.h"
// deklaracja nowej zmiennej globalnej na potrzeby trasy.cpp
extern OSOBA uzytk;

ale głowy nie dam, bo nie używam zmiennych globalnych.

0

Możesz pokazać projekt?

0

w dowolnym pliku .cpp utwórz zmienną (dla ulatwienia nazwe ten plik test.cpp):
OSOBA uzytk;

w pliku test.h:
extern OSOBA uzytk;

i wtedy po zaincludowaniu test.h powinienes miec widoczna ta zmienna globalna

0

Jasne, że mogę. Tylko nie wiem jak go tu dodać? Wrzucić tylko kody plików main.cpp, main.h, trasy.cpp, trasy.h? Czy załączyć jakoś cały projekt? (jako załącznika nie mogę dodać pliku rar).

0

@krwq: Zrobiłam tak jak pisałeś. Przy extern OSOBA uzytk; dostaję error Storage class 'extern' is not allowed here

0

Dziękuję wszystkim tutaj za poświęcony mi czas. Zajrzę oczywiście jeszcze jutro. Ale teraz muszę uciekać, bo siedzę nad tym programem od 9 rano (na szczęście nie tylko nad tym problemem ;) ) i przestaję już myśleć zupełnie.

Dzięki jeszcze raz! Może jutro, na spokojnie i na świeżo problem się rozwiąże :) Miłego wieczoru!

Mal

0

Proszę, http://www.2shared.com/file/0E7E4bYD/projekt.html

W pliku trasa.h masz:

extern enum Osoba {
LEKARZ = 1,
PACJENT
} uzytkownik;

Ale równie dobrze może być:

enum Osoba {
LEKARZ = 1,
PACJENT
};

extern uzytkownik;

Osobiście preferuję drugi sposób zapisu.

1

jeszcze raz wytłumacze na przykładzie:

a.cpp - uzywamy sobie zmiennej:

#include "b.h"

int main()
{
  uzytkownik = LEKARZ;
  return 0;
}

b.h - mówi o tym jak zdefiniowana jest klasa 'Osoba' oraz że gdzieś istnieje zmienna 'uzytkownik':

#ifndef __B_H__
#define __B_H__

enum Osoba {
LEKARZ = 1,
PACJENT
};

extern Osoba uzytkownik;

#endif

b.cpp - definiujemy zmienna 'uzytkownik':

#include "b.h"

Osoba uzytkownik;
0

Dziękuję Wam ślicznie jeszcze raz! Teraz nie mam możliwości tego wklepać w kod, ale jestem pewna, że będzie tak działać :)

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