conflicting types for "function"

Ha lol der hat meinen 2. MOnitor mit fotografiert ^^

Na aber ich dachte jetzt mit dem
Code:
spielbrett=(struct Brett *)malloc(sizeof(struct Brett));
Initializiere ich sie? ...

Aber ist ja nun egal weil ich ja
Code:
struct Brett spielbrett;

void init_Spielbrett()
{
     
    //spielbrett=malloc(sizeof(struct Brett)); 
     
    spielbrett.a=A;
    spielbrett.b=B;
    spielbrett.damenCount=0;
    
...
...
...
}
Verwende und auch da der error kommt.
 
Zuletzt bearbeitet:
ok ich habe jetzt folgendes:

Code:
struct Brett
{
       int a;
       int b;
       int damenCount;
       int positionsCount;
       
       struct Dame *damen;
       struct Position positions[A][B];
       struct Position next_Position; 
            
};

void init_Spielbrett()
{
     
    spielbrett.damen = (struct Dame *)malloc(sizeof(struct Dame)); 
     
    spielbrett.a=A;
    spielbrett.b=B;
 ...
}

int add_Dame(struct Dame dame){
     
    if(spielbrett.positions[dame.x][dame.y].is_taken == 0)
    { 
        spielbrett.damen[spielbrett.damenCount]=dame;
        spielbrett.damenCount++; 
        spielbrett.damen = (struct Dame *)malloc((spielbrett.damenCount+1)*sizeof(struct Dame));
        ...
}

Nun ist doch das Spielbrett eine Instanz da
Code:
struct Brett spielbrett;
und
Code:
struct Dame *damen;
initializiert durch
Code:
spielbrett.damen = (struct Dame *)malloc(sizeof(struct Dame));

aber der Fehler ist immer noch da
 
Ich danke dir schon mal dafür dass du dir
so die Zeit dafür nimmst ... :D

Code Aktuell:
Code:
/**************HEADER-FILE****************
*                           data_base.h                               *
****************************************/       
#define A 8
#define B 8

struct Position
{
    int x;
    int y;
    int is_taken;    
};

struct Dame
{
       int x;
       int y;       
};

struct Brett
{
       int a;
       int b;
       int damenCount;
       int positionsCount;
       
       struct Dame *damen;
       struct Position positions[A][B];
       struct Position next_Position; 
};

/************** *****C-FILE****************
*                   8_Damen_Problem_Main.c                  *
****************************************/  
#include <stdio.h>
#include <stdlib.h>

#include "Data_Base.h"

struct Brett spielbrett;


void add_Position(struct Position position)
{
     spielbrett.positions[position.x][position.y]=position;
     spielbrett.positionsCount++;
}

void init_Spielbrett()
{
     
    spielbrett.damen = (struct Dame *)malloc(sizeof(struct Dame)); 
     
    spielbrett.a=A;
    spielbrett.b=B;
    spielbrett.damenCount=0;
    
    int x=0, y=0;
    
    for(;x < A;x++)
        for(y=0;y < B;y++){
            struct Position position;
            position.x = x;
            position.y = y;
            position.is_taken = 0;
            add_Position(position);
        }              
}

struct Dame init_Dame(int x, int y)
{
    struct Dame dame;
    dame.x = x;
    dame.y = y;
    
    return dame;     
}
/*
return 0 not done
return 1 done
*/
int add_Dame(struct Dame dame){
     
    if(spielbrett.positions[dame.x][dame.y].is_taken == 0)
    { 
        spielbrett.damen[spielbrett.damenCount]=dame;
        spielbrett.damenCount++; 
        spielbrett.damen = (struct Dame *)malloc((spielbrett.damenCount+1)*sizeof(struct Dame));
        
        struct Position position = spielbrett.positions[dame.x][dame.y];
        spielbrett.positions[dame.x][dame.y].is_taken = 1;
       
        int count_X = sizeof(spielbrett.positions),
            count_Y = sizeof(spielbrett.positions[position.x]),
            i=0, j=0;
            
        for(;i<count_Y;i++)
        {
            spielbrett.positions[position.x][i].is_taken = 1;
            
            for(j=0;j<count_X;j++)
            {
                spielbrett.positions[j][position.y].is_taken = 1;
                
                if(i - position.x == j - position.y)
                    spielbrett.positions[i][j].is_taken = 1;
            }
        }
        
        return 1;
    }
    return 0;
}

/*
return 0 non-collision
return 1 collision
*/
int check_collision(struct Dame dame_1, struct Dame dame_2)
{
    int x_1 = dame_1.x, y_1 = dame_1.y,
        x_2 = dame_2.x, y_2 = dame_2.y;
    
    if(
       x_1 == x_2 || y_1 == y_2 ||
       (x_1 - x_2) == (y_1 - y_2)
       )
               return 1;
    return 0;
} 
/*
return 0 non-collision
return 1 collision
*/
int check_all_collisions()
{
    int i=0, j=0 ,count = spielbrett.damenCount;
    for(;i < count;i++)
        for(j=0;j < count; j++)
            if(i != j && check_collision(spielbrett.damen[i], spielbrett.damen[j]))
                return 1;       
    return 0;
}

int next_free_position(){

    struct Position position;
    int i=0, j=0,
        count_X=sizeof(spielbrett.positions),
        count_Y=sizeof(spielbrett.positions[0]);
        
    for(;i<count_X;i++)
        for(j=0;j<count_X;j++)
            if(spielbrett.positions[i][j].is_taken == 0)
            {
                spielbrett.next_Position = spielbrett.positions[i][j];
                return 1;
            }
                
    return 0;
}

int main(int argc, char *argv[])
{
  init_Spielbrett();
  
  while(next_free_position())
  {
      struct Dame dame;
      dame.x = spielbrett.next_Position.x;
      dame.y = spielbrett.next_Position.y;
      
      add_Dame(dame);
  }   
  
  
  printf("Anzahl Damen: %d", spielbrett.damenCount);
  
  system("PAUSE");	
  return 0;
}
 
Du bekommst eine Access violation an folgender Stelle:
C:
        for(;i<count_Y;i++)
        {
            spielbrett.positions[position.x][i].is_taken = 1;
            
            for(j=0;j<count_X;j++)
            {
--->          spielbrett.positions[j][position.y].is_taken = 1;
                
                if(i - position.x == j - position.y)
                    spielbrett.positions[i][j].is_taken = 1;
            }
        }

Grund dafür ist dass du für count_X bzw count_Y folgendes verwendest:
C:
count_X=sizeof(spielbrett.positions)
count_Y=sizeof(spielbrett.positions[0])

Dies funktioniert natürlich nicht, denn sizeof(...) gibt dir die Anzahl Bytes zurück die verwendet werden und nicht die anzahl Elemente. sizeof macht aber in diesem Context sowieso nicht Sinn, du weisst die Dimension von positions in jedem Fall, du hast ja die #defines A und B die genau dafür stehen.

Ein kleiner Tipp:
Überarbeite deine Codeformatierung so shnell wie möglich, dein Code ist extrem schlecht lesbar! Ein paar Beispiele:
C:
    for(;i<count_X;i++)
        for(j=0;j<count_X;j++)
            if(spielbrett.positions[i][j].is_taken == 0)
            {
                spielbrett.next_Position = spielbrett.positions[i][j];
                return 1;
            }
// besser:
	for( ; i < count_X; i++ )
	{
		for( j = 0; j < count_X; j++ )
		{
			if( spielbrett.positions[i][j].is_taken == 0 )
			{
				spielbrett.next_Position = spielbrett.positions[i][j];
				return 1;
			}
		}
	}

Wobei man sich über die zusätzlichen Abstände beim Beginn und Ende von Bedingungen streiten kann.

C:
int i=0, j=0 ,count = spielbrett.damenCount;
// besser:
int i = 0;
int j = 0;
int count = spielbrett.damenCount;

Geize nicht mit Zeilen! Monitore sind mittlerweile gross, Mausräder einfach zu bedienen und praktisch alle IDEs highlighten Vorkommen von Variabeln. Von daher kein Grund da zu knausern. Eindeutigkeit beim Lesen geht vor!

Grüsse
Cromon
 
Nun gut ich werde mir deinen Rat zu Herzen nehmen,
dass wurde mir auch immer in der Ausbildung gesagt
und mein Chef heult deswegen auch immer rum ^^

Der Code läuft nun durch, danke für die Hilfe.
(Auch wenn er mir noch sagt es wären 7 Damen aber das ist sicher nur ein counter
Problem da ich mit 0 beginne)

Vielen Dank noch mal
 

Neue Beiträge

Zurück