我用 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/