c++头文件中vector声明错误

c++ error declaring vector in header file

本文关键字:声明 错误 vector 文件 c++      更新时间:2023-10-16

找不到这个问题的答案。我很久没有使用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);

错误消失。谢谢你的帮助。

不能这样初始化成员。使用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,这是我以前没有使用过的。我来回答向量

需要在构造函数中设置vector的大小。

头文件

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