2016-07-01 2 views
-1

これまでのところ、ユーザーの入力によって提供される債券と要素の金額を見つけるためにプログラムを取得しようとしています。私は多くの異なる文字列(要素の名前)で同じ変数(結合)を定義する最も簡単な方法は、構造体を作成し、その構造体のメンバーとしての要素を定義するだろうと思った:異なる値を持つ複数の構造体メンバーに同じ変数を割り当てる?

#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; 
}; 

その後、プログラムをエラーのリターン1: expected initializer before ‘.’ token int Hydrogen.bonds=1;

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

私はC++を学ぶように私はこのプログラムを書いていますが、私は簡単にSを見つけることができませんこれに忠実です。私は基本的に要素を列挙し、その結合数を定義しようとしています(例えば、Hydrogen.bonds = 1; Carbon.bonds = 4; Nitrogen.bonds = 3;)。

これを行うには良い方法がありますか?

答えて

1

あなたのプログラムは、これが動作しないための2つの無効なライン

int Hydrogen.bonds=1; 

をコンパイルされません。しかし、既存のものを提供するので、中止されます。これを解決するには、コンストラクタを使用するか、メインにHydrogen.bonds = 1を追加します。

二面倒ライン

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

あなたが<<が不足しているので、この1つは問題が発生します。残念ながら、xは文字列であり、あなたが望むElementも参照しません。その代わりに、入力を元に戻すだけです。

ルックアップテーブルを使用してください。私はstd::mapを調べることをお勧めします。まずメンバーを設定します。 (table[element_string] = element_propertiesなど)table[element_string]で簡単に参照でき、設定した内容が返されます。 std::map CPLUSPLUSため

基準物質 - http://www.cplusplus.com/reference/map/map/?kw=map

0

はい、良い方法があります。

基本的に要素と結合数の間にルックアップテーブルを作成しています。私はまずそれをやることから始めます(std :: mapは簡単なスタートになります)。 main()関数の静的または先頭に値を設定するだけです。

次の問題は出力です。適切な場所に十分なオペレーター(< <)があることを確認してください。

私は携帯電話に乗っていて、実際にあなたのための解決策を書くことはできませんが、それは私があなたの最初の問題の説明に近づく方法です。 intを開始することにより、コンパイラは新しい変数を期待しているため

関連する問題