2016-12-20 106 views
0

我想創建一個程序,它將元素週期表中的數據存儲到我可以隨時訪問的數組中。我想通過與在它的每個元素的數據結構來做到這一點,並作出結構的每個元素的實例陣列中的「元素週期表[119]」如何在C++中創建一個結構類型數組

這裏是我的代碼:

#include <iostream> 
using namespace std; 

struct element 
{ 
    string symbol; 
    string name; 
    float atomicWeight; 

}; 

element periodicTable[119]; 
periodicTable[1].symbol = "H"; 
periodicTable[1].name = "Hydrogen"; 
periodicTable[1].atomicWeight = 1.008; 

int main() 
{ 
    cout << periodicTable[1].symbol << periodicTable[1].name << periodicTable[1].atomicWeight << endl; 

    return 0; 
} 

我運行Linux,當我嘗試編譯此我得到這個錯誤:「錯誤:元素週期表沒有一種」

我想知道如何正確地作出結構的數組,如果有人有更好的方法來製作這樣的程序,或者通過一切手段讓我知道任何其他錯誤。

+0

你有任何其他錯誤? – Valentin

+5

你不能在命名空間範圍有聲明,只能聲明。語句進入函數內部。將'periodicTable [1] .symbol =「H」;'等移到'main'裏面。 –

+0

你不能在函數之外放置語句。 –

回答

1

使用全局變量不是一個好主意,除非你有很強的理由。所以正常情況下你可以如下操作:

int main() 
{ 
    element periodicTable[119]; 
    periodicTable[1].symbol = "H"; 
    periodicTable[1].name = "Hydrogen"; 
    periodicTable[1].atomicWeight = 1.008; 
    cout << periodicTable[1].symbol << periodicTable[1].name << periodicTable[1].atomicWeight << endl; 

    return 0; 
} 

如果你真的想使用全局變量,你可以這樣做:

#include <iostream> 
using namespace std; 

struct element 
{ 
    string symbol; 
    string name; 
    float atomicWeight; 

}; 

element periodicTable[119]{ 
    {}, 
    {"H", "Hydrogen", 1.008f}, // 1.008 is double, 1.008f is float 
}; 

int main() 
{ 
    cout << periodicTable[1].symbol << periodicTable[1].name << periodicTable[1].atomicWeight << endl; 

    return 0; 
} 
2

您不能在函數之外使用賦值(或任何其他語句)。使用初始化代替:

element periodicTable[119] = { 
    {"H", "Hydrogen", 1.008} 
, {"He", "Helium", 4.003} 
, ... 
}; 

還要注意的是C++數組編制索引從零開始,而不是從一個,所以該陣列的初始元素是periodicTable[0],不periodicTable[1]

+1

我認爲OP可能想要使用它們的原子序數來訪問元素,這需要一個幾乎不重要的映射。此外,'#include '缺少。 – juanchopanza

相關問題