2017-12-18 5 views
0
#include<iostream> 
    #include <conio.h> 
    using namespace std; 

    struct book 
    { int bookid; 
     char title[20]; 
     float price; 
    }b2; 

int main() 
    { 
    b2={100,"c++ by saurabh",105.2}; //values initialised during variable declaration 

    cout<<"\n"<<b2.bookid; 
    cout<<b2.title<<" "<<b2.price; 
    return 0; 
    getch(); 
    } 

Das obige Code zeigt Fehler in der Ausgabe wie folgt aus:keine Übereinstimmung für ‚Operator =‘ (Operandentypen sind ‚Buch‘ und ‚<geschweiften Klammern stehenden Initialisiererliste>‘)

C:\Users\shandude\Documents\codeblock\cprog\struct2.cpp|13|error: no match for 'operator=' (operand types are 'book' and '')|

C:\Users\shandude\Documents\codeblock\cprog\struct2.cpp|5|note: no known conversion for argument 1 from '' to 'const book&'|

+0

Was denkst du 'b2 = {100," C++ von suarabh ", 105.2}; 'soll das machen? – Galen

+0

Off topic, aber die letzten beiden Zeilen 'return 0;' und 'getch();' sollten umgekehrt werden. 'getch();' wird absolut nichts tun. Die Anwendung wird zurückkehren, bevor diese Zeile jemals aufgerufen wird. Außerdem: '' namespace std; 'im globalen Geltungsbereich zu verwenden, ist niemals eine gute Idee oder gute Praxis. –

+0

Sollte der Code _initialize_ 'b2' (Teil der' b2'-Erstellung) oder _assign_ ein Wert für 'b2 (Wert nach der Erstellung) sein? – chux

Antwort

0

Was Sie tun ist nicht Initialisierung, sondern eine Zuweisung, weil b2 bereits früher deklariert wurde. Sie müssen an der Stelle, die Variable deklariert initialisiert wird:

struct book 
    { int bookid; 
     char title[20]; 
     float price; 
    } b2 = {100,"c++ by saurabh",105.2}; //values initialised during variable declaration 

int main() 
{ 
    cout<<"\n"<<b2.bookid; 
    cout<<b2.title<<" "<<b2.price; 
    return 0; 
    getch(); 
} 
1

Sie verwenden können:

b2 = book{100,"c++ by saurabh",105.2}; 

PS

ich die Membervariable title zu einem std::string Ändern würde empfehlen. Die Verwendung von char Array Strings in Benutzercode darzustellen, ist ein Anachronismus im Jahr 2017.

struct book 
{ 
    int bookid; 
    std::string title; 
    float price; 
}; 
+0

War es 1998 nicht schon ein Anachronismus? ;) – Quentin

-1

Sie versuchen b2 von list initialization zu initialisieren. Sie können die reference lesen, um zu sehen, wie Sie es initialisieren.
Es gibt viele Methoden. Ein einfacher Weg ist:

book b2{100,"c++ by saurabh",105.2}; 
+2

'b2' existiert bereits. Der Code versucht * ihm * zuzuweisen, was anders ist als bei der Initialisierung –

+0

Deine Lösung hat mir die genaue Antwort gegeben was genau ich wo ich verwechselt habe, Vielen Dank. – shandude

0

Welche Compier verwenden Sie?

Nach dem Entfernen #include <conio.h> und Ersetzen float durch double akzeptieren Clang und VC++ beide diesen Code, während GCC beschwert. Ich denke, es ist ein Bug für GCC.

Obwohl dies keine Initialisierung ist, ist es äquivalent, den Zuweisungsoperator mit der Initialisiererliste als Argument aufzurufen. Der Parameter des Zuweisungsoperators ist const book&. Verwenden Sie diese Initialisierungsliste, um diese Referenz zu initialisieren. Das Programm ist auch klar definiert.

Verwandte Themen