c ++错误在头文件中声明向量

时间:2014-08-05 23:52:19

标签: c++ 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);

错误消失了。提前感谢您的帮助。

3 个答案:

答案 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
};