C++ 无效数组<T, N> 下标

标签 c++ arrays class templates struct

我用 C++ 制作了一个基本的类/结构集合,它有类 Book ,我没有包括在内,还有一些其他的,以及 struct <强> FixedSizeBookCollection 。但是,当使用 FSCB ,它没有按计划工作:

books.h

template<size_t Size> struct FixedSizeBookCollection : private std::array<const Book*, Size>{
    FixedSizeBookCollection(const char* Name) : name_(Name){}
    void operator+=(const Book& Book)try{
        if((*this).size() > Size){
            std::ostringstream errorMessage;
            errorMessage << "The FixedSizeBookCollection " << name_ << "'s size capacity has been overfilled" << std::endl;
            throw std::exception(errorMessage.str().c_str());
        }
        /* Line 97 - */ (*this).at(currentPos++) = &Book;
    }catch(const std::exception& e){
        std::ostringstream errorMessage;
        errorMessage << e.what() << " - on line (approx.) " << (__LINE__ -3);
        throw std::exception(errorMessage.str().c_str());
    }
private:
    const char* name_;
    int currentPos;
};

并且在 main.cpp

FixedSizeBookCollection<5> Collection("My Fixed Size Collection");
Collection += MyBook;

但是我得到了错误:

Error: invalid array <T, N> subscript on line (approx.) 97

问题是什么?

最佳答案

您的currentPos 未初始化。它可以有任何值(value)。添加到你的 c-tor 中,用 0 初始化这个变量。

关于C++ 无效数组<T, N> 下标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20800275/

相关文章:

python - 从两个 numpy 数组中删除匹配的元素

c# - 如何从类库中获取正确的资源

python - 创建类时何时使用 __init__

c++ - 使用迭代器的 std::vector 模板构造函数是否允许转换?

c++ - 规范化 "Point"

javascript - 如何从输入创建数组?

java - Java 中删除数组的最高值和最低值

c++ - Objective-c iOS 中的二维码生成器

c++删除分配给基类指针的派生类的指针

java - 打印具有 3D 数组字段的类