Почему я не могу объявить векторную глобальную переменную? - PullRequest
0 голосов
/ 20 марта 2012

Все компилировалось, пока я не добавил 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 ]

6 голосов
/ 20 марта 2012

На самом деле квалификации недостаточно, хотя необходимо:

std::vector<Move> bestLine;

Это также является определением, и, если в заголовке вы рискуете получить ошибки компоновщика.

Вы должны объявить его extern и определить его в одном файле реализации:

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

//search.cpp
//...
std::vector<Move> bestLine;
0 голосов
/ 20 марта 2012

попробуйте добавить оператор после включения заголовочного файла

using namespace std;

иначе объявить вектор как

std::vector<Move>bestLine;
...