-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 に答える
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 に答える