-1

在任何地方都找不到答案。很久没用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);

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

4

3 回答 3

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) {}
于 2014-08-05T23:58:14.630 回答
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){

}
于 2014-08-05T23:59:41.230 回答
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
};
于 2014-08-05T23:58:18.130 回答