我有以下代码,目标是利用
colour
变量作为代码中的二进制标志。
main.cpp
#include "turn.h"
#include <stdio.h>
void subfunc(Turns t) {
printf("%d\n", t);
}
void func() {
Turns colour = getTurn(&turn);
subfunc(colour);
}
int main() {
setTurn(&turn, WHITE);
func();
return 0;
}
转.cpp
#include "turn.h"
extern Turn turn;
void setTurn(Turn *t, Turns newTurn) {
t->turn = newTurn;
}
Turns getTurn(Turn *t) {
return t->turn;
}
void changeTurn(Turn *t) {
if (t->turn == WHITE) {
t->turn = BLACK;
} else {
t->turn = WHITE;
}
}
转.h
#ifndef TURN_H
#define TURN_H
enum Turns {WHITE, BLACK};
typedef struct {
Turns turn;
} Turn;
void setTurn(Turn *t, Turns newTurn);
Turns getTurn(Turn *t);
void changeTurn(Turn *t);
#endif
不幸的是,这段代码给了我一个错误,指出
turn
未在 main.cpp 范围内声明。
Turns
而不是 enum Turns
。如果您只想使用 Turns
,则需要 typedef
:
enum Turns {WHITE, BLACK};
typedef enum Turns Turns;
extern Turn turn;
从未定义,因此当问题 1 解决时程序将无法链接。将 extern Turn turn;
移至 turn.h
并在 turn.cpp
中定义它:
Turn turn;