【发布时间】:2013-12-27 11:54:11
【问题描述】:
我在 C++ 中创建了一个基本的类/结构集合,其中有类 Book(我没有包括在内)和其他一些类,以及 structFixedSizeBookCollection。但是,当使用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
有什么问题?
【问题讨论】:
-
你必须告诉我们“第 97 行”在哪里
-
clang 编译得很好,除了抛出异常,我必须将基类
std::exception的抛出更改为具体异常类的抛出,例如 std::runtime_error 或任你选择:en.cppreference.com/w/cpp/error/exception -
注意我说的是编译。由于
.at进行边界检查,您还应该按照 ForEver 的回答检查初始化。我只是不能说你是在谈论编译错误还是运行时错误。
标签: c++ arrays class templates struct