Struktur als Übergabewert einer Funktion



  • Hallo,
    ich soll als Übung ein Programm zum Rechnen mit komplexen Zahlen erstellen. Natürlich ohne die vorgefertigte C-Syntax 😉

    Hab auch schön eine Struktur global definiert, damit alle Funktionen Strukturen erzeugen können:

    typedef struct
    {
    	int realteil;
    	int imagteil;
    }complex;
    

    mein Problem besteht nun darin, dass zb die Funktion "addition" keine Strukturen aufnehmen kann oder zurückgeben kann.

    complex addition(complex complex1, complex complex2)
    {
    //to do
    }
    

    Headerdatei mit der Zeile :

    complex addition(complex complex1, complex complex2);
    

    gibts schon, nur wenn man den berühmten Punkt nach einem Strukturnamen setzt, wird nix gefunden.
    Hier auch noch meine Fehlerliste^^:

    1>f:\programmieren\komplexezahlen\komplexezahlen\addition.c(1) : error C2061: Syntaxfehler: Bezeichner 'addition'
    1>f:\programmieren\komplexezahlen\komplexezahlen\addition.c(1) : error C2059: Syntaxfehler: ';'
    1>f:\programmieren\komplexezahlen\komplexezahlen\addition.c(1) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'complex1'
    1>f:\programmieren\komplexezahlen\komplexezahlen\addition.c(1) : error C2061: Syntaxfehler: Bezeichner 'complex1'
    1>f:\programmieren\komplexezahlen\komplexezahlen\addition.c(1) : error C2059: Syntaxfehler: ','
    1>f:\programmieren\komplexezahlen\komplexezahlen\addition.c(1) : error C2059: Syntaxfehler: ')'
    1>complex.c
    1>f:\programmieren\komplexezahlen\komplexezahlen\rechnung.h(3) : error C2061: Syntaxfehler: Bezeichner 'addition'
    1>f:\programmieren\komplexezahlen\komplexezahlen\rechnung.h(3) : error C2059: Syntaxfehler: ';'
    1>f:\programmieren\komplexezahlen\komplexezahlen\rechnung.h(3) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'complex1'
    1>f:\programmieren\komplexezahlen\komplexezahlen\rechnung.h(3) : error C2061: Syntaxfehler: Bezeichner 'complex1'
    1>f:\programmieren\komplexezahlen\komplexezahlen\rechnung.h(3) : error C2059: Syntaxfehler: ','
    1>f:\programmieren\komplexezahlen\komplexezahlen\rechnung.h(3) : error C2059: Syntaxfehler: ')'
    1>f:\programmieren\komplexezahlen\komplexezahlen\complex.c(27) : warning C4013: 'addition' undefiniert; Annahme: extern mit Rückgabetyp int
    1>f:\programmieren\komplexezahlen\komplexezahlen\complex.c(27) : error C2440: '=': 'int' kann nicht in '_complex' konvertiert werden

    ich hoffe, jmd weiß, wie man die Funktion definieren muss, damit das funktioniert.



  • Hallo,

    Azrael89 schrieb:

    gibts schon, nur wenn man den berühmten Punkt nach einem Strukturnamen setzt, wird nix gefunden.

    Das liegt daran, das irgendwo ein Fehler im Code ist, darum funktioniert die automatische Codevervollständigung nicht.
    Bis auf einen fehlenden Rückgabewert in der Funktion addition ist alles ok, der Fehler muss also an einer anderen Stelle sein.
    Ich vergesse gern mal das Semikolon hinter einem Prototypen in einer Headerdatei,
    weil ich die Headerdateien meist ganz zum Schluß per Copy and Paste aus der C Datei erstelle und dann hagelt es dutzendweise Folgefehler.
    Ich nehme an, das bei dir der Typ complex nicht bekannt ist, also ab damit in eine Headerdatei mit Include Guard und dann mit #include "complex.h" bekannt machen.

    Gruß,
    B.B.



  • Eigentlich müsste das so funktionieren. Hast du die Struktur "complex" denn auch vor der Funktion "addition" deklariert?

    MfG, Jochen



  • ich habe die struktur complex in der main.c direkt unter den include-befehlen deklariert. dachte das geht so, aber wenn man die in der headerdatei deklarieren muss, sollte mein fehler klar sein.

    so hab die struktur nun in der headerdatei deklariert. nur kann die funktion "addition" trotzdem nicht drauf zugreifen:

    1>f:\programmieren\komplexezahlen\komplexezahlen\addition.c(5) : error C2371: 'addition': Neudefinition; unterschiedliche Basistypen
    1> f:\programmieren\komplexezahlen\komplexezahlen\rechnung.h(8): Siehe Deklaration von 'addition'(adittino kann jetzt drauf zugreifen, hatte versehentlich zwei verschiedene datentypen in headerdatei und der funktion selbst stehen)
    1>f:\programmieren\komplexezahlen\komplexezahlen\addition.c(11) : error C2440: 'return': '_complex' kann nicht in 'int' konvertiert werden

    Bleibt noch:
    welchen datentyp muss ich denn für addition wählen? complex funzt net und bei int bekomm ich die meldung, dass ne struktur nicht in int konvertiert werden kann -.-

    addition sieht jetzt übrigens so aus:

    #include <stdio.h>
    #include <math.h>
    #include "rechnung.h"
    
    addition(complex complex1, complex complex2)
    {
    	complex ergebnis;
    	ergebnis.realteil=complex1.realteil+complex2.realteil;
    	ergebnis.imagteil=complex1.imagteil+complex2.imagteil;
    	return ergebnis;
    }
    


  • Azrael89 schrieb:

    1>f:\programmieren\komplexezahlen\komplexezahlen\addition.c(5) : error C2371: 'addition': Neudefinition; unterschiedliche Basistypen

    Der Rückgabetyp fehlt.



  • Azrael89 schrieb:

    Bleibt noch:
    welchen datentyp muss ich denn für addition wählen? complex funzt net und bei int bekomm ich die meldung, dass ne struktur nicht in int konvertiert werden kann -.-

    Die Entscheidung liegt bei dir. Der Rückgabetyp complex funzt, wenn man es richtig macht.
    Probier doch mal folgendes:

    // test.h
    
    #ifndef TEST_H
    #define TEST_H
    
    typedef struct 
    { 
        int re, im; 
    }complex;
    
    complex addition(complex complex1, complex complex2);
    
    #endif // TEST_H
    
    // test.c
    
    #include "test.h"
    
    complex addition(complex complex1, complex complex2)
    {
    	complex ergebnis = {0};
        return ergebnis;
    }
    
    // main.c
    #include "test.h"
    
    int main() 
    {    
    	complex ne_einfach, a, b;
    	ne_einfach = addition ( a, b );
    
    	return 0; 
    }
    


  • complex ist ein unglücklicher Name für die Struktur. Wenn man dann die eigebauten komplexen Zahlen haben will, muss man _Complex sagen.
    😮



  • dass ich vor die funktion complex schreibe als datentyp hab ich ja schon versucht, da hat er trotzdem gemeckert. naja, erstmal drüber schlafen^^

    edit: hat sich erledigt. nachdem ich vor das addition jetzt complex geschrieben habe liefs. habs vorher schonmal gehabt und da gabs fehler, aber wahrscheinlich, weil ich die struktur erst nicht im headerfile deklariert hab 😃

    vielen dank für eure antworten, ihr habt mir echt geholfen


Anmelden zum Antworten