Argument unii w funkcji

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:

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ę.

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.

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 ).

0

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

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ć :)

0

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

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 :(
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

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ę.

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

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.

0

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

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