2016-04-09 11 views
-1

Ok, ich arbeite an diesem kleinen Code und ich habe zwei Klassen gemacht, advString und advString_stream. Hier sind die Klassen:Problem mit dem Erstellen eines Objekts in C++

class advString 
{ 
public: 
    string s_value; 
    int i_value; 
    advString(string s) : s_value(s) {} 
    advString(int i) : i_value(i) {} 
}; 
//-------------------------------------------------------------------------------- 
class advString_stream 
{ 
public: 
    advString get(); 
    void putback(advString as); 
private: 
    advString buffer; 
    bool full = false; 
}; 
//-------------------------------------------------------------------------------- 

Und dann später nach unten in dem Code, definiere ich diese Aufgabe:

advString_stream ads; 

Es scheint, wie es für mich arbeiten sollte, aber wenn ich führen Sie den Code, es gibt mir diesen Fehler:

'advStream::advStream(void)': attempting to reference a deleted function

So kann mir jemand helfen? Ich kann anscheinend keinen advString_stream machen, ohne dass sich der Compiler beschweren muss.

+0

Für Effizienz 'advString (String s)' wäre besser als 'advString (const String & s)' –

+0

Zu einem nicht verwandten Hinweis, sind Sie sicher, dass Sie die Funktion 'advString_stream :: get' Funktion * durch Wert * und nicht durch Referenz? –

+0

@JoachimPileborg Was meinen Sie mit "Referenz"? Es ist beabsichtigt, den advString entweder a) aus dem Puffer oder b) aus cin – jiggumbob

Antwort

2

Da das enthaltene advString Objekt (das buffer Mitglied) keinen Standardkonstruktor hat, müssen Sie explizit einen advString_stream Konstruktor zur Verfügung zu stellen, um richtig das buffer Objekt zu konstruieren.

So etwas wie

class advString_stream 
{ 
public: 
    advString_stream() 
     : buffer(someArgumentHere) // Using constructor initializer list 
    {} 

    ... 
}; 
+0

Und wie würde ich das tun? – jiggumbob

+0

@jibboom Aktualisierte Antwort –

2

Sie müssen erklären und einen Standardkonstruktor zu implementieren, wenn Sie eine andere contructor erklären und implementieren.

+0

Wie genau würde ich das tun? – jiggumbob

Verwandte Themen