我有以下代码,目标是利用
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 范围内声明。
extern Turn turn;
既没有在main.cpp
中可见地声明,也没有在任何地方定义,因此如果使声明可见,程序将无法链接。
将
extern Turn turn;
移至 turn.h
并在 turn.cpp
中定义它:
Turn turn;
注意:您不需要
typedef
使用 C++ 编写课程。这就足够了:
struct Turn {
Turns turn;
};