Wieloplikowy program w C

0

Witam,
Piszę program na zaliczenia w C. Mianowicie są to szachy. Postanowiłem napisać ten projekt w C++ mając na uwadzę aby nie używać strumieni,klas i innych typowo C++ konstrukcji. Mam kilka plików nagłówkowych które są do pliku z funkcją main includowane innym plikiem nagłówkowym całość wygląda tak:

#ifndef dodano
#define dodano
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <Windows.h>
#include "struktury.h"
#include "interface.h"
#include "mozliwe_ruchy.h"
#include "zagrozenia.h"
#include "ruchy.h"
#include "AI.h"
#endif
extern char Bufor[50];
extern int Obecny_gracz;
extern HANDLE in;
extern HANDLE out;
extern int KONIEC;
 

podczas kompilacji wyskakuje multum błędów typu

 Error	39	error C2143: syntax error : missing '{' before '*'	c:\users\syberius\documents\visual studio 2010\projects\aisd\pn_szachy\pn_szachy\interface.h	9	1	PN_szachy
Error	41	error C2059: syntax error : ')'	c:\users\syberius\documents\visual studio 2010\projects\aisd\pn_szachy\pn_szachy\interface.h	9	1	PN_szachy

i tak dalej tylko że błędy zgłaszane są w takich linijkach

void Zapisz_ruch(FILE * ,Pozycja ,Pozycja );
void Zapisz_gracza(FILE * ,Gracz* );
void Zapis_gre(Gracz* ,Gracz* );
void Odczytaj_gracza(FILE * ,Gracz* ,int); 

Gracz i Pozycja są to struktury których opis znajduje się w struktury.h

Proszę o pomoc, dodam że ten sam kod działa pod C++ bez zarzutu

0

Hmm, też kiedyś miałem tak że kod stricte C visualowy kompilator C przyjąć nie chciał, a kompilator C++ tego środowiska program przepuszczał. Nie dochodziłem specjalnie o co chodzi tylko na potrzeby tego programu (stricte w C) przesiadłem się na IDE C-Free z zestawem narzędzi MinGW i wszystko działało jak należy. Tobie radzę zrobić to samo jeśli nie chcesz tracić czasu.

0

W dev-c++ który jest chyba pod mingw jest to samo

0

Dev-C++ jest stary, użyj innego IDE z MinGW. Poza tym zobacz, kompilator wywala Ci błędy składniowe (syntax error) w miejscach gdzie nie ma błędu składniowego :P. Jak chcesz się bawić to się baw, ja albo użyłbym innego IDE albo kompilowałbym kompilatorem C++.

0

Ja bym sprawdził inną linijkę kodu ;)

0

W C++ definicja struktury od razu wiąże z daną strukturą jej nazwę, a w C nie. Są na to dwa sposoby, używanie w kodzie nazwy poprzedzonej struct, lub użycie typedefa:

 
struct a{
   ...
};
struct a b;
typedef struct c{
   ...
} C;
struct c x;  //te dwie linijki znaczą to samo
C y;
0

Skoro ma być w C, to po co piszesz w C++, przysparzając sobie właśnie takich problemów?

w C jeśli zrobisz

struct Gracz {
...
};

to typem jest struct Gracz a nie samo Gracz, i tak należy zawsze pisać.

Albo użyć sztuczki

typedef struct Gracz {
...
} Gracz;

(nazwa typu pojawia się dwa razy) i wtedy można pisać samo Gracz albo struct Gracz. Obie nazwy mogą nawet być różne.

Możesz też napisać

typedef struct {
...
} Gracz;

wtedy nie powtarzasz nazwy typu, ale nie będzie można użyć typu Gracz wewnątrz tej struktury (czyli zagnieździć).

Ale uważaj, jeśli zrobisz

struct {
...
} Gracz;

to oznacza to utworzenie zmiennej o nazwie Gracz, a sam typ jest nienazwany.

W C++ jest ta różnica, że jak zrobisz

struct Gracz {
...
};

to wystarczy potem pisać samo Gracz (ale struct Gracz też zadziała). Dzięki temu nie trzeba kombinować z typedefem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1