将相同的变量分配给具有不同值的多个struct成员?

时间:2016-07-01 01:23:00

标签: c++

到目前为止,我正在努力让我的程序找到用户输入提供的债券和元素数量。我认为在许多不同的字符串(元素的名称)中定义相同变量(键)的最简单方法是创建结构并将元素定义为该结构的成员:

#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 ++,但是我无法找到更简单的解决方案。我试图基本列出元素,然后定义它们的键数(例如,Hydrogen.bonds = 1; Carbon.bonds = 4; Nitrogen.bonds = 3;)。

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

由于两行无效

,您的程序无法编译
int Hydrogen.bonds=1;

这不起作用,因为从int开始编译器需要一个新变量;但是,您提供现有的,因此它会中止。您应该使用构造函数或将Hydrogen.bonds = 1添加到main。

来解决此问题

第二个麻烦的线

  

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

这一问题导致问题,因为您错过了<<。不幸的是,x是一个字符串,并且不会引用你想要它的元素。相反,它只会打印输入。

您要做的是使用查找表。我建议调查std::map。首先,您要设置其成员。 (例如:table[element_string] = element_properties)然后您可以使用table[element_string]轻松引用它,它将返回您设置的任何内容。

std::map的参考资料 cplusplus - http://www.cplusplus.com/reference/map/map/?kw=map

答案 1 :(得分:0)

是的,还有更好的方法。

您实际上是在元素和债券数量之间创建一个查找表。我首先要做的就是这样做(std :: map将是一个简单的开始)。您只需要将其填充为静态或main()函数的顶部。

下一个问题是输出。确保在正确的位置有足够的操作符(&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;

我在移动设备上,并不能真正为您编写解决方案,但这就是我将如何处理您的初始问题描述。