2016-07-01 11 views
-1

Bis jetzt versuche ich, mein Programm zu finden, die Menge an Bindungen und Element haben können, durch die Eingabe des Benutzers zur Verfügung gestellt. Ich dachte, der einfachste Weg, um die gleiche Variable (Anleihen) zu definieren, die über viele verschiedene Zeichenketten (Name des Elements) wäre eine Struktur zu schaffen und die Elemente als Mitglieder dieser Struktur zu definieren:Gleiche Variablen mehreren Strukturelementen mit unterschiedlichen Werten zuweisen?

#include <iostream> 
#include <string> 

using namespace std; 


struct element { 
    int bonds; 
} Hydrogen, Helium, Lithium, Beryllium, Boron, Carbon, Nitrogen, Oxygen; 

int Hydrogen.bonds=1; 

int main() 
{ 
    string x; 
    int ans; 
    cout<<"Enter an element to find the amount of bonds it can have."; 
    cin>>x; 
    cout<<x" has "x.bonds" bonds."; 
    return 0; 
}; 

Dann wird das Programm die Fehler zurück 1 mit: expected initializer before ‘.’ token int Hydrogen.bonds=1;

und

‘std::string’ has no member named ‘bonds’

ich dieses Programm schreibe, wie ich über C++ lernen, aber ich kann ein einfacher s nicht gefunden Lösung zu diesem. Ich versuche, die Elemente im Grunde aufzulisten und dann ihre Bindungszahlen zu definieren (z. B. Hydrogen.bonds = 1; Carbon.bonds = 4; Nitrogen.bonds = 3;).

Gibt es einen besseren Weg, dies zu tun?

Antwort

1

Ihr Programm wird nicht wegen zwei ungültigen Zeilen kompilieren

int Hydrogen.bonds=1; 

Dies funktioniert nicht, da durch mit int der Compiler Start erwartet eine neue Variable; Sie stellen jedoch eine vorhandene zur Verfügung, so dass sie abbricht. Sie sollten das beheben, indem Sie einen Konstruktor verwenden oder Hydrogen.bonds = 1 zu main hinzufügen.

Die zweite lästige Linie

cout<<x" has "x.bonds" bonds.";

Dieses Problem verursacht, weil Sie << fehlt sind. Leider ist x eine Zeichenkette und bezieht sich nicht auf das gewünschte Element. Stattdessen wird nur die Eingabe zurück gedruckt.

Was Sie tun möchten, ist eine Nachschlagetabelle verwenden. Ich schlage vor, in std::map zu schauen. Zuerst würden Sie seine Mitglieder festlegen. (etwas wie: table[element_string] = element_properties) Dann können Sie es leicht mit table[element_string] referenzieren und es wird zurückkehren, was auch immer Sie es einstellen.

Referenzmaterial für std::map cplusplus - http://www.cplusplus.com/reference/map/map/?kw=map

0

Ja, es gibt einen besseren Weg.

Sie erstellen im Wesentlichen eine Nachschlagetabelle zwischen einem Element und der Anzahl der Bindungen. Ich würde damit beginnen, zuerst (eine std :: map wäre ein einfacher Start). Sie müssen es nur als statisches oder am Anfang der main() - Funktion auffüllen.

Das nächste Problem ist der Ausgang. Stellen Sie sicher, dass Sie genügend Operatoren (< <) an den richtigen Stellen haben.

Ich bin auf einem Handy und kann nicht wirklich eine Lösung für Sie schreiben, aber so würde ich Ihre ursprüngliche Problembeschreibung angehen.

Verwandte Themen