valarray — ошибка c ++ при объявлении вектора в заголовочном файле

не могу найти ответ на это нигде. давно не использовал с ++. в этом файле 512, 256, 4736 и 448 подчеркнуты красным как ошибка «ожидание спецификатора типа»

// AttackSqrs.h
#include <valarray>
#include <vector>
#include <unordered_map>
#include <string>
#include <iostream>

class AttackSqrs
{
public:
AttackSqrs();
~AttackSqrs();

private:
void init();
std::valarray<int> board(512);
std::valarray<int> vrChessPieces(256);
std::valarray<int> vrAttackSqrs(4736);
std::valarray<int> vrNumAttackSqrsEachSqr(448);
};

но когда я создаю этот заголовочный файл:

// diag.h
#include <valarray>
#include <vector>
#include <unordered_map>
#include <string>
#include <iostream>void init();
std::valarray<int> board(512);
std::valarray<int> vrChessPieces(256);
std::valarray<int> vrAttackSqrs(4736);
std::valarray<int> vrNumAttackSqrsEachSqr(448);

ошибки уходят. Заранее благодарю за любую помощь.

-1

Решение

Вы не инициализируете участников таким образом. Используйте список инициализации AttackSqrs конструктор:

class AttackSqrs
{
public:
AttackSqrs();
~AttackSqrs();

private:
void init();
std::valarray<int> board;
std::valarray<int> vrChessPieces;
std::valarray<int> vrAttackSqrs;
std::valarray<int> vrNumAttackSqrsEachSqr;
};

// Then in a CPP file
AttackSqrs::AttackSqrs() :  board(512), vrChessPieces(256), vrAttackSqrs(4736),
vrNumAttackSqrsEachSqr(448) {}
1

Другие решения

В заголовочном файле вы объявляете только переменную и ее типы. Любой вид конструкции объекта реализован в файле cpp.

AttackSqrs.h

class AttackSqrs
{
public:
AttackSqrs();
~AttackSqrs();

private:
void init();
std::valarray<int> board;
std::valarray<int> vrChessPieces;
std::valarray<int> vrAttackSqrs;
std::valarray<int> vrNumAttackSqrsEachSqr;
};

AttackSqrs.cpp

AttackSqrs::AttackSqrs() :
board(512),
vrChessPieces(256),
vrAttackSqrs(4736),
vrNumAttackSqrsEachSqr(448){

}
1

Ваш вопрос о векторах, но вы используете valarray, который я раньше не использовал. Я отвечу за векторы.

Вам нужно установить размер векторов в конструкторе.

заголовочный файл

class AttackSqrs
{
public:
AttackSqrs();
~AttackSqrs();

private:
std::vector<int> board(512);
};

файл cpp

AttackSqrs::AttackSqrs()
: board(512)
{
}

В качестве альтернативы, поскольку размеры постоянны, вы можете использовать массивы.

class AttackSqrs
{
public:
AttackSqrs();
~AttackSqrs();

private:
std::array<int, 512> board; // c++11
int board[512]; // pre-c++11
};
0
По вопросам рекламы [email protected]