无法在任何地方找到答案。没有长时间使用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);
错误消失了。提前感谢您的帮助。
答案 0 :(得分: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 :(得分: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){
}
答案 2 :(得分:0)
你的问题是关于矢量,但你使用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
};