не могу найти ответ на это нигде. давно не использовал с ++. в этом файле 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);
ошибки уходят. Заранее благодарю за любую помощь.
Вы не инициализируете участников таким образом. Используйте список инициализации 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) {}
В заголовочном файле вы объявляете только переменную и ее типы. Любой вид конструкции объекта реализован в файле 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){
}
Ваш вопрос о векторах, но вы используете 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
};