如何从 C 中的另一个文件访问结构体?

问题描述 投票:0回答:1

我有以下代码,目标是利用

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 范围内声明。

c struct enums global-variables
1个回答
0
投票
  1. 您正在使用
    Turns
    而不是
    enum Turns
    。如果您只想使用
    Turns
    ,则需要
    typedef
    enum Turns {WHITE, BLACK};
    typedef enum Turns Turns;
    
  2. extern Turn turn;
    从未定义,因此当问题 1 解决时程序将无法链接。将
    extern Turn turn;
    移至
    turn.h
    并在
    turn.cpp
    中定义它:
    Turn turn;
    
© www.soinside.com 2019 - 2024. All rights reserved.