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

问题描述 投票: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
投票

extern Turn turn;
既没有在
main.cpp
中可见地声明,也没有在任何地方定义,因此如果使声明可见,程序将无法链接。

extern Turn turn;
移至
turn.h
并在
turn.cpp
中定义它:

Turn turn;

注意:您不需要

typedef
使用 C++ 编写课程。这就足够了:

struct Turn {
    Turns turn;
};
© www.soinside.com 2019 - 2024. All rights reserved.