• Hallo liebe ForumteilnehmerInnen!

    Ich beginne gerade damit, mich mit C zu beschäftigen und hänge bei folgendem Problem:
    Mein Programm soll das Volumen einer Kugel bzw. eines Würfels und deren Massen mithilfe der Dichte berechnen.

    Dafür will ich einen Header.h und zwei Module schreiben.

    In einem der Module sollen die Funktionen Definiert werden, im anderen das Hauptprogramm stehen.

    Das kompilieren der Funktionen zu einer .o Datei hat gut funktioniert, das Programm will jedoch nicht.

    Könntet ihr einen Blick darauf werfen?

    Mein Header.h sieht folgendermaßen aus:

    #include<stdio.h>


    #define rho 7.86;

    double VKugel(double a);
    double VWuerfel(double A);


    Das Programm ist:


    #include<stdio.h>
    #include"Header.h"
    #include<math.h>


    int main()
    {
    double r,m,M;

    printf("Gib einen Radius r ein: ");
    scanf("%lf", &r);

    printf("Das Volumen einer Kugel mit dem Radius r ist: %lf cm³\n",
    VKugel(r));
    printf("Das Volumen eines Wuerfels mit der Seitenlaenge r ist: %lf
    cm³\n", VWuerfel(r));

    m=VKugel(r)*rho;
    M=VWuerfel(r)*rho;

    printf("Die Masse einer Eisenkugel mit dem Radius r ist: %lf kg\n", m);
    printf("Die Masse eines Eisenwuerfels mit der Seitenlaenge r ist: %lf
    kg\n", M);

    return 0;
    }



    Als error Meldung beim Compilieren des Programms sagt der Compiler:

    Program.c:13: error: too few arguments to function ‘VKugel’
    Program.c:14: error: too few arguments to function ‘VWuerfel’
    Program.c:16: error: too few arguments to function ‘VKugel’
    Program.c:17: error: too few arguments to function ‘VWuerfel’

    Danke für eure Hilfe!

  • Keine Ahnung, welchen Compiler du verwendest, aber mit gcc kompilert das (wenn man die Zeilenumbrüche innerhalb der Strings entfernt). VKugel und VWuerfel werden nicht bemängelt.

  • Ich verwende auch gcc...

    Das seltsame ist, wenn ich die Funktionen und die Definition in das Hauptprogramm vor int main() gebe, und es einfach als Programm compiliere funktioniert es

  • Mir ist nicht ganz klar: Die Deklarationen sind in Header.h enthalten, gut; aber in welcher Datei definierst du die Funktionen? Vielleicht könntest du auch die Funktionsdefinitionen posten, eventuell ist da etwas fehlerhaft (obwohl es unwahrscheinlich ist, weil das Programm ja funktioniert, wenn du die Definitionen in die Hauptdatei verschiebst).

  • Was jedenfalls falsch ist:

    Code
    #define rho 7.86;

    Da musst du das Semikolon am Ende entfernen. Im konkreten Programm verursacht das zwar keine Probleme, weil du rho immer unmittelbar vor dem Ende der Anweisung benutzt, aber im allgemeinen Fall ist diese Definition falsch.

  • Wenn ich das Semikolon einfach im Header entferne, dann spuckt der Compiler trotzdem die selben error Meldungen aus...

    Meine Funktionen sind:

    #include<stdio.h>
    #include<math.h>

    double VKugel(double a)
    {
    return (4./3)*M_PI*a*a*a;
    }

    double VWuerfel(double A)
    {
    return A*A*A;
    }

  • Wenn ich das Semikolon einfach im Header entferne, dann spuckt der Compiler trotzdem die selben error Meldungen aus...

    Das Semikolon hat auch nicht mit diesen Fehlermeldungen zu tun.

    In welcher Datei hast du sie definiert, und wie bindest du diese Datei in das Programm ein?

  • Hoioi!

    Das ganze kompiliert bei mir:

    Header.h

    Code
    #include<stdio.h>
    
    
    
    
    #define rho 7.86;
    
    
    double VKugel(double a);
    double VWuerfel(double A);

    prog.c

    func.c

    Aufruf

    Code
    gcc -o prog func.c prog.c


    kompiliert ohne murren.

    Benutzung

    Code
    ./prog
    Gib einen Radius r ein: 5
    Das Volumen einer Kugel mit dem Radius r ist: 523.598776 cm³
    Das Volumen eines Wuerfels mit der Seitenlaenge r ist: 125.000000 cm³
    Die Masse einer Eisenkugel mit dem Radius r ist: 4115.486376 kg
    Die Masse eines Eisenwuerfels mit der Seitenlaenge r ist: 982.500000 kg

    geht auch.

    Was Adok meinte, ist, dass das define einfach dumm "Suchen und Ersetzen" macht. überall wo du roh stehen hast wird bei dir also "7.86;" eingesetzt. Da roh bei dir immar am Zeilenende steht, ergeben sich daraus dann Zeilen "irgendwas 7.86;;". Würdest du roh allerdings irgendwo in der Zeile benutzen, und nicht am Ende, würdest du durch den Strichpunkt Probleme bekommen.

    Für alles weitere räume ich den Platz für Leute, die sich mit C besser auskennen, als ich :D

    l.g.

  • Adok:

    Ich compiliere mittels
    gcc -c -Wall -O -o Funktion.o Funktion.c => das funktioniert toll.
    gcc -c -Wall -O -o Program.o Program.c => das gibt mir die oben angegeben Fehlermeldungen.


    emptyvi: ich wollte beide Programme von .c auf .o compilieren um sie dann mittels

    gcc -O -Wall -lm -o Program Program.o Function.o zusammenzufügen.

    Hat jemand eine Idee warum das nicht funktioniert?


  • Hat jemand eine Idee warum das nicht funktioniert?

    Ich zumindest nicht, denn bei mir funktioniert das ebenfalls einwandfrei:

  • Adok:

    Ich compiliere mittels
    gcc -c -Wall -O -o Funktion.o Funktion.c => das funktioniert toll.
    gcc -c -Wall -O -o Program.o Program.c => das gibt mir die oben angegeben Fehlermeldungen.


    Mit gcc habe ich nicht so viele Erfahrungen, jedoch fällt mir auf, dass in der zweiten Zeile Funktion.o nicht vorkommt. Da Program.c auf die dort definierte Funktion zugreifen muss, muss Funktion.o irgendwie verlinkt werden.

  • Mit gcc habe ich nicht so viele Erfahrungen, jedoch fällt mir auf, dass in der zweiten Zeile Funktion.o nicht vorkommt. Da Program.c auf die dort definierte Funktion zugreifen muss, muss Funktion.o irgendwie verlinkt werden.

    Das sind ja nur die Schritte zum Kompilieren. Das Linken erfolgt dann mit

    Code
    gcc -O -Wall -lm -o Program Program.o Function.o


    Das passt schon so.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!