【发布时间】:2014-02-27 22:15:43
【问题描述】:
我正在编写一个周期表程序来帮助我理解类。 我希望能够通过几个属性来显示/排序元素,例如它是金属、非金属还是准金属。我不确定该怎么做,但我的第一个猜测是创建一个对象数组;但是,我在使用构造函数设置值时遇到问题。
类
class Element{
public:
enum class groupNames { HYDROGEN, ALKALI, ALKALINE, GROUP_THREE, GROUP_FOUR, GROUP_FIVE,
GROUP_SIX, GROUP_SEVEN, GROUP_EIGHT, GROUP_NINE, GROUP_TEN,
GROUP_ELEVEN,GROUP_TWELVE, GROUP_THIRTEEN, GROUP_FOURTEEN,
GROUP_FIFTEEN, CHALCOGEN, HALOGEN, NOBLE_GAS
};
enum class orbitals {ORBITAL_NOTSET, S_BLOCK, P_BLOCK, D_BLOCK, F_BLOCK};
enum class metal_status {METAL = 0, METALLOID, NONMETAL};
Element();
Element(int aNumber, int pNumber,groupNames groupnames, metal_status MetalStatus, orbitals Orbital,std::string eName, std::string eSybol);
void displayProperties();
private:
groupNames groupNumber;
orbitals orbital;
metal_status metalStatus;
std::string elementSymbol;
std::string elementName;
int atomicNumber;
int periodNumber;
};
Element::Element()
{
atomicNumber = 0;
periodNumber = 0;
groupNumber = groupNames::HYDROGEN;
metalStatus = metal_status::METAL;
orbital = orbitals::ORBITAL_NOTSET;
elementName = "NULL";
elementSymbol = "NULL";
}
Element::Element(int aNumber, int pNumber,groupNames groupnames, metal_status MetalStatus, orbitals Orbital,std::string eName, std::string eSymbol)
{
groupNumber = groupnames;
metalStatus = MetalStatus;
orbital = Orbital;
atomicNumber = aNumber;
periodNumber = pNumber;
elementName = eName;
elementSymbol = eSymbol;
}
void Element::displayProperties()
{
std::cout << elementName << ", " << elementSymbol << "\n"
<< "Group Number: " << as_integer(groupNumber) << "\n"
<< "Metal Status: " << as_integer(metalStatus) << "\n"
<< "Orbital: " << as_integer(orbital) << "\n"
<< "Atomic Number: "<< atomicNumber << "\n"
<< "Period Number: "<< periodNumber;
}
Previous Method of Initialization //工作正常,问题是我不能按属性排序
Element Hydrogen(1,1, Element::groupNames::HYDROGEN, Element::metal_status::NONMETAL, Element::orbitals::S_BLOCK, "Hydrogen", "H");
Element Helium(2, 1, Element::groupNames::NOBLE_GAS, Element::metal_status::NONMETAL, Element::orbitals::S_BLOCK, "Helium", "He");
std::array 方法 -- 问题!
std::array<Element, 115> Elements =
{
Elements[0],
Elements[1](1,1, Element::groupNames::HYDROGEN, Element::metal_status::NONMETAL, Element::orbitals::S_BLOCK, "Hydrogen", "H")
};
错误: 错误:不匹配调用 '(std::array::value_type {aka Element}) (int, int, Element::groupNames, Element::metal_status, Element::orbitals, const char [9], const char [2])'
【问题讨论】:
-
您似乎在初始化所述数组时使用了未初始化的
std::array的元素。 -
孤岛危机-对于其他人(如果我没记错的话)-您可以更正代码以删除对初始化列表中未初始化数组的引用吗?另外,小问题,但
enum在您的代码中实际上被命名为groupNames,但您将其称为group- 就像我说的,小问题,但很高兴没有错误代码的问题。跨度> -
我可以换组。我有一个排版设置,当它添加到这里时我没有改变它。就阵列而言,这是问题的一部分。我不明白为什么我应该更正我的问题中的代码,因为它会导致以后可能遇到这个问题的人感到困惑。我也可能误会你了,这两天因为AP课,我睡了4个小时。