Problem beim kompilieren ( undefined reference to)
-
Hallo Forengemeinde,
Ich sitze nun schon einige Stunden bei meinem Programm und verzweifle schon nahezu...
Ich bekomme beim kompilieren jedesmal folgende Fehlermeldungen:
undefined reference to 'kollisionstest'
[Error] ld returned 1 exit statusVieleicht kann mir ja jemand wertvolle Tipps geben wo mein Fehler begraben ist
Hier noch mein C-Code:
[code="c"]
int kollisionstest (int zeile, int spalte, char schachbrett[])
{
unsigned int zaehler=0;for (zaehler=0 ; zaehler<spalte; zaehler++)
{
if ( (schachbrett[zaehler]=zeile) || (abs (schachbrett[zaehler]-zeile)==abs (zaehler-spalte)))
{
col_counter++;
return 0; //Kollision erkannt
}
}
nocolcounter++;
return 1; //keine kollision
}int setzeDame(int write, int eingabe,char schachbrett[])
{
eingabe=boardSize;
// int write;
int i; // Zählvariable zur Ausgabe der Damenif (write==eingabe) //Ausgabeprüfung
{
bildFreiDame(0, eingabe, schachbrett);
}
else if (eingabe<4)
{
bildFreiDame(1,eingabe,schachbrett); //keine Lösungen
}
else
{
for (i=0; i < eingabe ; i++)
{
if (kollisonstest(i, write, schachbrett))
{
schachbrett[write]=i;
setzeDame(write+1, eingabe, schachbrett);
}
}
}
}int main(void)
{
char schachbrett [groesse];
int horizontal;
int vertikal;
unsigned int zeile_neu;
groesse=boardSize;while (1)
{
setzeDame(0, groesse, schachbrett );
for (vertikal=0 ; vertikal<boardSize ; vertikal++)
{
if ((vertikal % 2)==1)
{
for (horizontal=0 ; horizontal<boardSize ; horizontal++)
{
zeile_neu++;if ((zeile_neu % 2)==1)
{
printf ("xx");
}
else
{
printf ("yy");
}
}
}
}
}
-
Ganz andere Probleme hast du:
xxx.c: In Funktion »kollisionstest«: xxx.c:9:1: Fehler: »col_counter« nicht deklariert (erste Benutzung in dieser Funktion) xxx.c:9:1: Anmerkung: jeder nicht deklarierte Bezeichner wird nur einmal für jede Funktion, in der er vorkommt, gemeldet xxx.c:13:1: Fehler: »nocolcounter« nicht deklariert (erste Benutzung in dieser Funktion) xxx.c: In Funktion »setzeDame«: xxx.c:19:9: Fehler: »boardSize« nicht deklariert (erste Benutzung in dieser Funktion) xxx.c: In Funktion »main«: xxx.c:46:19: Fehler: »groesse« nicht deklariert (erste Benutzung in dieser Funktion) xxx.c:50:9: Fehler: »boardSize« nicht deklariert (erste Benutzung in dieser Funktion) xxx.c:65:1: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »printf« [standardmäßig aktiviert] xxx.c:69:1: Warnung: Unverträgliche implizite Deklaration der eingebauten Funktion »printf« [standardmäßig aktiviert] xxx.c:74:1: Fehler: expected declaration or statement at end of input
Fix erst mal die. Ich vermute stark, dass du globale Variablen verwendest (Pfui, das macht man nicht, es sei denn, du hast einen verdammt guten Grund dafür, und den sehe ich nicht bei dir), und das Inkludieren von
stdio.h
ist auch nicht drin. Das Beispiel sollte stand-alone kompilierbar sein.EDIT: Außerdem hast du die Code-Tags verhauen, aber warst trotzdem wenigstens bemüht, es korrekt zu machen. Das ist besser, als was sonst hier oft seinen Code fallenlässt.
-
erstmal Danke für die rasche Antwort, du hast Recht diese Variablen waren Global daklariert.
Hab vorher vergessen diesen Teil des Programmes mitzu kopieren.Hab sie nun in den Funktionen deklariert, aber trotzdem das selbe Problem mit den Fehlermeldungen.
Achja zum schreiben des Progammes verwende ich dec-c++
Hier nochmal mein Code mit den deklarationsänderungen:
[code="c"]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define boardSize 8int kollisionstest (int zeile, int spalte, char schachbrett[])
{
unsigned int zaehler=0;
unsigned int col_counter=0; //kollisionscounter
unsigned int nocolcounter=0;
for (zaehler=0 ; zaehler<spalte; zaehler++)
{
if ( (schachbrett[zaehler]=zeile) || (abs (schachbrett[zaehler]-zeile)==abs (zaehler-spalte)))
{
col_counter++;
return 0; //Kollision erkannt
}
}
nocolcounter++;
return 1; //keine kollision
}//----------------------------------------------------
int setzeDame(int write, int eingabe,char schachbrett[])
{
eingabe=boardSize;
// int write;
int i; // Zählvariable zur Ausgabe der Damenif (write==eingabe) //Ausgabeprüfung
{
bildFreiDame(0, eingabe, schachbrett);
}
else if (eingabe<4)
{
bildFreiDame(1,eingabe,schachbrett); //keine Lösungen
}
else
{
for (i=0; i < eingabe ; i++)
{
if (kollisonstest(i, write, schachbrett))
{
schachbrett[write]=i;
setzeDame(write+1, eingabe, schachbrett);
}
}
}
}int main(void)
{
int groesse = boardSize;
char schachbrett [groesse];
int horizontal;
int vertikal;
unsigned int zeile_neu;
while (1)
{
setzeDame(0, groesse, schachbrett );
for (vertikal=0 ; vertikal<boardSize ; vertikal++)
{
if ((vertikal % 2)==1)
{
for (horizontal=0 ; horizontal<boardSize ; horizontal++)
{
zeile_neu++;if ((zeile_neu % 2)==1)
{
printf ("xx");
}
else
{
printf ("yy");
}
}
}
}
}
}
-
Junge.
Einmal lasse ich dir durchgehen, aber das nächste Mal packst du bitte noch ein abschließendes Code-Tag an das Ende deiner Kreation:
/*Und so macht man das.*/
Was deinen Fehler angeht ... überleg mal stark: du hast ne Funktion "kollisionstest", und du rufst "kollisonstest" auf.
kollisionstest
kollisonstest
Merkste was?
Außerdem fehlt da noch die Definition der Funktion
bildFreiDame
, die du wahrscheinlich auch nicht in deinen Post reingepakt hast, anstatt wie ein normaler Mensch das Testprogramm zu hacken, zu probieren, ob du den Fehler reproduzieren kannst, und dann Copy+Pasts in die Maske einzugeben.
-
Danke für die Hilfe, auf dieses doofe i bin ich trotz 100 mal dürberlesen nicht gekommen
-
Demnach ist die gepostete Fehlermeldung (undefined reference to 'kollisionstest' ) auch falsch.
Denn die Funktion mit i ist ja definiert und daher gibt es auch eine
reference
dazu.Sowas immer per Copy&Paste schreiben.
-
Mache dich über deine IDE kundig, ob diese über Codevervollständigung verfügt; dann passieren solche Schreibfehler gar nicht erst.