我目前的經驗主要是使用Java,但我試圖學習C++,而且我仍然在努力理解指針,重載等。原諒我關於標題,但我不知道如何呈現我的問題。無論如何,我在學習期間遇到了這個練習,我想要一些幫助。練習提供了一個類Container和一個main(),我應該擴展該類並使main()工作提供正確的結果。練習中的Nullpointer錯誤
template <typename T>
class Container
{
protected:
T * storage;
size_t num_items;
size_t storage_size;
public:
virtual void operator += (const T item) { }
virtual ~Container() { }
Container() : storage(nullptr), num_items(0), storage_size(0) { }
T operator [] (size_t index)
{
if (num_items==0)
return T(0);
return storage[index<num_items?index:num_items];
}
inline size_t size() { return num_items; }
};
void main(int argc, char* argv[])
{
Container<long> * store = new Container_ex(); // I'm suppose to fill this gap
---------------
size_t num_data;
cin >> num_data;
for (size_t i=0; i<num_data; i++)
{
long item;
cin >> item;
*store+=item;
}
for (size_t i=0; i<store->size(); i++)
std::cout << (*store)[i] << " ";
std::cout << std::endl;
delete store;
}
到目前爲止,我已經完成了這項工作。問題出在當我嘗試重載+ =因爲我得到一個異常錯誤(this->storage was nullptr)
但無論如何我不明白在這個練習中完全使用存儲,所以我將不勝感激任何幫助。
class Container_ex : public Container<long> {
public:
Container_ex() : Container() {}
~Container_ex() { delete[] storage; }
void operator += (const long item)
{
*storage = const_cast<long&>(item);
*storage = *storage + item;
num_items = num_items + 1;
storage_size = storage_size + 1;
}
};
你從哪裏爲「存儲」分配內存? –
我應該在運營商超負荷運行嗎?因爲Container中給定的構造函數初始化爲null –
'storage'是一個指針,但它實際上並不*指向任何地方。您需要先將它指向某個地方,然後才能對其進行解引用。 –