Meine Erfahrung ist bisher in Java, aber ich versuche, C++ zu lernen, und ich habe immer noch Schwierigkeiten, Zeiger, Überladungen usw. zu verstehen. Verzeihen Sie mir über den Titel, aber ich wusste nicht, wie zu präsentieren mein Problem. Jedenfalls bin ich während des Studiums auf diese Übung gestoßen und hätte gerne Hilfe. Die Übung stellt eine Klasse Container und eine main() zur Verfügung, und ich sollte die Klasse erweitern und main() arbeiten lassen, um das richtige Ergebnis zu liefern.Nullpointer Fehler in Übung
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;
}
Bisher habe ich das getan. Das Problem liegt, wenn ich versuche zu überladen + = Ursache ich bekomme einen Ausnahmefehler (this->storage was nullptr)
aber auf jeden Fall verstehe ich nicht die Verwendung von Speicher vollständig in dieser Übung, so würde ich jede Hilfe zu schätzen wissen.
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;
}
};
Wo haben Sie jemals Speicher für 'Speicher' reserviert? –
Sollte ich es innerhalb der Operatorüberladung tun? Weil der angegebene Konstruktor in Container mit null initialisiert wurde –
'Speicher' ist ein Zeiger, aber er zeigt * nirgends *. Sie müssen es irgendwo zeigen, bevor Sie es dereferenzieren können. –