www.mikrocontroller.net

Forum: PC-Programmierung First defined here


Autor: Chriss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe es jetzt schon mit eclipse versucht der code::blocks, aber 
jedesmal wenn ich das Projekt bauen möchte kommen diese fehler:
Description  Resource  Path  Location  Type
first defined here  collatz.c  /test/src  line 6  C/C++ Problem
first defined here  collatz.c  /test/src  line 19  C/C++ Problem
first defined here  collatz.c  /test/src  line 26  C/C++ Problem
first defined here  eingabe.c  /test/src  line 3  C/C++ Problem
first defined here  eingabe.c  /test/src  line 42  C/C++ Problem
first defined here  eingabe.c  /test/src  line 53  C/C++ Problem
multiple definition of `collatz'  collatz.c  /test/src  line 6  C/C++ Problem
multiple definition of `collatzGerade'  collatz.c  /test/src  line 19  C/C++ Problem
multiple definition of `collatzUngerade'  collatz.c  /test/src  line 26  C/C++ Problem
multiple definition of `flushStd'  eingabe.c  /test/src  line 53  C/C++ Problem
multiple definition of `liesNatZahl'  eingabe.c  /test/src  line 3  C/C++ Problem
multiple definition of `schreibeNatZahl'  eingabe.c  /test/src  line 42  C/C++ Problem

und ich weiß einfach nicht was das soll = ((


eingabe.c
#include "eingabe.h"
unsigned int liesNatZahl(unsigned int min)
{
    unsigned int einlesen=0;
    int stimmt=0;

    while(stimmt ==0)
    {
        printf("\nBitte geben Sie eine positive Zahl n > %i ein: ", min);

        /*EINGABE NEGATIV*/
         if(scanf("-%u", &einlesen)==1)
        {
            printf("Bitte geben Sie keine negative Zahlen ein!");
            flushStd();
        }

        /*EINGABE KLEINER MIN*/
        else if(scanf("%u", &einlesen)==1 && einlesen <=min)
        {
            printf("Keine Zahl groeser %i eingegeben!", min);
            flushStd();
        }

        /*EINGABE ZEICHEN*/
        else if(getchar() != '\n')
        {
            printf("Bitte geben Sie keine Zeichen ein!");
            flushStd();
        }

        /*EINGABE STIMMT*/
        else
        {
            stimmt=1;
            return einlesen;
        }
    }
}

void schreibeNatZahl(unsigned int n)
{
    static int zahler=0;
    if(zahler%6==0)
    {
        printf("\n");
    }
    printf("%13u", n);
    zahler++;
}

void flushStd()
{
    while(getchar()!= '\n');
}

eingabe.h
#ifndef EINGABE_H_INCLUDED
#define EINGABE_H_INCLUDED
#include <stdio.h>
unsigned int liesNatZahl(unsigned int min);
void schreibeNatZahl(unsigned int n);
void flushStd();

#endif // EINGABE_H_INCLUDED

collatz.c
#include "collatz.h"
void collatzGerade(unsigned int n);
void collatzUngerade(unsigned int n);

void collatz(unsigned int c)
{
    if(c==1);
    else if((c%2)==0)
    {
        collatzGerade(c);
    }
    else if ((c%2)==1)
    {
        collatzUngerade(c);
    }

}
void collatzGerade(unsigned int n)
{
    n = n / 2 ;
    schreibeNatZahl(n);
    collatz(n);
}

void collatzUngerade(unsigned int n)
{
    n = 3 * n + 1;
    schreibeNatZahl(n);
    collatz(n);
}

collatz.h
#ifndef COLLATZ_H_INCLUDED
#define COLLATZ_H_INCLUDED
#include <stdio.h>
void collatz(unsigned int c);
#endif // COLLATZ_H_INCLUDED

main.c
#include "eingabe.c"
#include "collatz.c"

int main()
{
    collatz(liesNatZahl(15));
    return 0;
}

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ersetze die Zeilen
#include "eingabe.c"
#include "collatz.c"
durch
#include "eingabe.h"
#include "collatz.h"

.c-Dateien werden normalerweise nicht includet, sondern getrennt
kompiliert. In deinem Projekt wird offensichtlich beides getan, deswegen
bekomst du die Doppeltgemoppeltmeldungen.

Autor: Chriss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wow vielen Dank!
Die Fehler sind weg!

Jetzt habe ich noch 2 Warnungen die ich mir nicht erklären kann:
Description  Resource  Path  Location  Type
control reaches end of non-void function  eingabe.c  /test/src  line 39  C/C++ Problem
implicit declaration of function 'schreibeNatZahl'  collatz.c  /test/src  line 21  C/C++ Problem


Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Funktion liesNatZahl ist als nicht-void deklariert, hat also 
einen Rückgabewert.

Den aber gibst Du nicht immer zurück; am Ende der Funktion fehlt ein 
return irgendwas.

Die zweite Meldung sagt aus, daß es keinen Funktionsprototypen für 
schreibeNatZahl gibt, bzw. daß der dort, wo die Funktion aufgerufen 
wird, nicht bekannt ist.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.