Argument unii w funkcji

Argument unii w funkcji
FL
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:7
0

Witajcie.

Mam kilka pytań:
#Czy można do funkcji przesłać argument który jest unią?
#Jeśli tak, to czy można napisać funkcję, do której przesyłamy ten argument i używamy go w przypisaniu?

Podczas moich ćwiczeń ( gdy się nie uczę to ćwiczę ) natknąłem się na coś takiego ( choć pewnie istnieje rozwiązanie ale go nie widzę ):

Mam unię o nazwie Union oraz strukturę o nazwie Struct. W tej strukturze jest obiekt tej unii o nazwie uObj. Do funkcji ( przeładowanej i friend ) trzeba m.in. przesłać argument typu Union. Definicja funkcji wygląda w ten sposób:

Kopiuj
void wpisz( Struct s, Union u, int n ) { s.u.i = n; }

I wyrzuca błąd, że w Struct nie ma nazwy u. Czy jest na to sposób? Czy można funkcji oznajmiać "dynamicznie" o który obiekt unii w tej strukturze chodzi?

Z góry dziękuję.

Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

A nie jest czasem tak że po prostu nie includowałeś pliku z definicją tej unii w pliku gdzie chcesz to zrobić? Bo kompilator musi skadś wiedzieć jakie pola ma ta unia.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
FL
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:7
0

Wszystko w tym samym pliku :) Tak jak mówiłem to tylko ćwiczenia więc struktura oraz unia mają zaledwie 3 pola ( int, double, char ).

Johnny_Bit
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Kielce
0

Pokaż definicje Struct i Union. Ide o 10pln że w struct nie masz u


HAKGER - 50% Complete
FL
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:7
0

Zgadza się nie mam bo chodzi mi o to czy da się powiedzieć funkcji w sposób jakby "dynamiczny" o którą unię chodzi. Na przykład weźmy sytuację w której mamy 2 obiekty takiej unii w tej strukturze. Można to zrobić oczywiście za pomocą dwóch funkcji i na stałe wklepać nazwę odpowiedniej unii w każdej z nich - banał. Ale czy da się to samo zrobić za pomocą jednej funkcji korzystając z przesłanego argumentu? Tego właśnie chciałbym się dowiedzieć :)

FL
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:7
0

Pozwolę to sobie zobrazować z pominięciem definicji unii oraz deklaracji przyjaźni:

Kopiuj
struct Struct
{
   Union uObj;
}

void wpisz( Struct s, Union u, int n ) { s.uObj.i = n; } // DOBRZE :)
void wpisz( Struct s, Union u, int n ) { s.u.i = n; } // ŹLE :(
KA
pokaż cały kod. może o to Ci chodzi, ale http://ideone.com/MjCfpi . 1. Nie możesz tak przeciążać funkcji. 2. w strukturze Struct nie ma pola unii o nazwie u jest tylko uObj. a Ty w 2 funkcji odwolujesz sie do u. 3. te ćwiczenie jest lekko bez sensu
FL
Wybacz wiem, że te funkcje nie mogą pojawić się w kodzie jednocześnie trochę źle to napisałem. Tylko napisałem co się stanie kiedy któraś z nich wystąpi w kodzie. Ta pierwsza się skompiluje ta druga nie.
Johnny_Bit
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Kielce
1

Chcesz się odwołać do elementu struktury w funkcji. Chcesz sprawdzić czy da się odwołać do dowolnego elementu struktury który jest unią przekazując ją jako parametr? Da się! Przekaż referencje do tej unii o którą Ci chodzi a nie będziesz musiał nawet podawać o którą strukturę Ci chodzi.

Looknij na to, jeśli używasz C++: http://stackoverflow.com/questions/672843/can-templates-be-used-to-access-struct-variables-by-name wyjaśni o co mi chodziło przez referencje


HAKGER - 50% Complete
edytowany 1x, ostatnio: Johnny_Bit
FL
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:7
0

W takim razie chodziło Ci o wskaźnik a nie o referencję :) ( referencja nic nie dała - sprawdzałem już wcześniej ). Mimo to podsunąłeś mi pewien pomysł. Sprawdzę i się odezwę.

FL
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:7
0

Problem rozwiązany ;) Wybaczcie, że zajmowałem wasz czas takimi głupotami. Wystarczyło użyć wskaźnika i teraz mogę wywołać te funkcje tak jak chcę a dana wartość zostanie wpisana do odpowiedniego obiektu ( trochę to żenujące, że było to takie proste ) http://ideone.com/Lqd7Ki

Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

@FrontLine
Ale przecież to co napisałeś jest zupełnie bez sensu. Po co tam niby ten wskaźnik? Skoro już wysyłasz do funkcji referencje do unii to możesz po prostu wpisać do niej wartość. Nie ogarniam po co tak to skomplikowałeś. Wtedy też zbędny jest argument Strukura w takiej funkcji.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
FL
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:7
0

Faktycznie... Teraz dopiero też załapałem o co chodziło Johnnemu. Nie wiem czemu tak to zagmatwałem. Dzięki za poprawkę ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.