у меня есть это в ball.h:Включая ЬурейеЕ в двух заголовочных файлах
#ifndef BALL_H_
#define BALL_H_
...
typedef void *PBALL ;
...
#endif
в paddle.h у меня есть:
#ifndef PADDLE_H_
#define PADDLE_H_
...
int contact_made(struct pppaddle*, PBALL);
...
#endif
Я получаю сообщение об ошибке в paddle.h, потому что это Безразлично Не знаю о PBALL. Поэтому, если я добавлю:
#ifndef BALL_H_
#include "ball.h"
#endif
в paddle.h (с инструкцией if или без него) он работает в моей среде Cygwin. Но в Linux, когда я перехожу к компиляции, я получаю: «множественное определение ошибки« newPBALL »на исходном файле, который использует PBALL, а также на функциях, определенных в ball.h. Как я могу получить paddle.h, чтобы понять PBALL, не сталкиваясь с этими проблемами в Linux?
Мой ball.c файл:
struct newball {
int x_pos, x_dir, y_pos, y_dir, y_delay, y_count, x_delay, x_count;
char symbol;
};
typedef struct newball *ball_struct_ptr;
struct newball the_ball;
#include "ball.h"
PBALL newPBALL() {
the_ball.y_pos = Y_INIT;
the_ball.x_pos = X_INIT;
the_ball.y_count = the_ball.y_delay = Y_DELAY;
the_ball.x_count = the_ball.x_delay = X_DELAY;
the_ball.y_dir = 1;
the_ball.x_dir = 1;
the_ball.symbol = DFL_SYMBOL; //Set the symbol of the ball
PBALL ptr = &the_ball;
return ptr;
}
Я не вижу 'newPBALL' в любом месте фрагментов кода. Пожалуйста, отправьте [полный, минимальный тестовый пример] (http://sscce.org). –
Кроме того, как тангенциальная нота, обычно считается плохой практикой скрывать указатели за typedefs. –
Кроме того, вам не нужен другой '# ifndef' вокруг' # include'. –