为什么我无法声明向量全局变量?

时间:2012-03-20 08:42:26

标签: c++ visual-c++ variables vector global-variables

在我添加vector<Move> bestLine;

之前,所有内容都在编译

search.h

#ifndef SEARCH_H
#define SEARCH_H

#include <vector>
#include "types.h"
#include "position.h"
#include "move.h"
#include "moves.h"

U8 searchDepth;
U8 searchCount;
vector<Move> bestLine; // The compiler doesn't like this.

void searchPosition(Position &P, U8 depth);
void searchMove(Move &M);

#endif

我收到的错误是:

1>d:\test\search.h(12): error C2143: syntax error : missing ';' before '<'
1>d:\test\search.h(12): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\test\search.cpp(30): error C2065: 'bestLine' : undeclared identifier

似乎编译器无法识别Move,因此未声明bestLine。我认为这可能是一个循环依赖,并试图为Move声明一个不完整的类型,但它没有任何效果。有人可以解释我错过的东西吗?

2 个答案:

答案 0 :(得分:6)

虽然有必要,但实际上排位是不够的:

std::vector<Move> bestLine;

这也构成了一个定义,如果在标题中,您可能会遇到链接器错误。

您应该声明它extern并在单个实现文件中定义它:

//search.h
//...
extern std::vector<Move> bestLine;

//search.cpp
//...
std::vector<Move> bestLine;

答案 1 :(得分:-2)

尝试在头文件包含

之后添加语句
using namespace std;

否则将vector声明为

std::vector<Move>bestLine;