可视C LNK2005与ENUM有关的错误

visual C++ LNK2005 error related to enum

本文关键字:错误 ENUM LNK2005 可视      更新时间:2023-10-16

我由于在标头文件中使用了枚举而遇到LNK错误2005。我不确定这是怎么回事。枚举通常包含在标题文件中吗?

这是我的代码。我有4个文件:board.h,board.cpp,solitaire.h,solitaire.cpp。

board.h:

#ifndef BOARD_H__
#define BOARD_H__
#include <iostream>
using namespace std;
const int NUM_ROWS = 6;
const int NUM_COLS = 6;
enum PieceType {
HasPiece, NoPiece, Invalid
};
PieceType board_data[NUM_ROWS][NUM_COLS];
#endif

board.cpp:

#include "board.h"

solitaire.h

#ifndef Solitaire_h__
#define Solitaire_h__
#include "board.h"
#endif

solitaire.cpp

#include "Solitaire.h"
int main() {
}

我得到的错误是

错误lnk2005" enum pieceType(* board_data)[6]" (?

谢谢!

问题与标题中的定义有关。这条线

PieceType board_data[NUM_ROWS][NUM_COLS];

在每个翻译单元中定义了一个新的数组board_data,其中包含标题。要解决此问题,请声明外部数组,即

extern PieceType board_data[NUM_ROWS][NUM_COLS];

之后,在一个CPP文件中定义数组。

注意:此问题与enum无关 - 您将与任何其他类型遇到相同的错误。