2012-02-23 130 views
0

結構中的結構,我該如何調用內部結構? 我當前的代碼是如何引用嵌套結構?

#include <iostream> 
#include <string> 

using namespace std; 

int N_ITEMS; 
int N_SEATS; 

struct ST_SEATS{ 
struct ITM_TYPE { 
    string name; 
    float price;  
}; 
}; 

int main() 
{ 
    cout << "Enter number of items: "; 
    cin >> N_ITEMS; 
    ST_SEATS seat[3]; 
    seat[1]::ITM_TYPE item[N_ITEMS]; 
    int i = 0; 
    string name = ""; 
    string input; 
    float price; 
    while (i < N_ITEMS) 
    { 
     cout << "Input item name: "; 
     cin >> input; 
     item[i].name = input; 
     cout << "item[" << i << "].name SET" << endl; 
     cout << "Input item price: "; 
     cin >> price; 
     item[i].price = price; 
     cout << "item[" << i << "].price SET" << endl; 
     i++; 
    } 
    i = 0; 
    while (i < N_ITEMS) 
    { 
     cout << "item[" << i << "].name = " << item[i].name << endl; 
     cout << "item[" << i << "].price = " << item[i].price << endl; 
     i++; 
    } 
    system("pause"); 
} 

我試圖讓每一個座位都有自己的定單收據製造商計劃,基本上是這樣。 我知道,不涉及這個問題來得好,索要更多信息...哦,我差點忘了,錯誤添加

21 E:\Documents\School\Computing\SDD\Assign#2\Projects\random.cpp `::ITM_TYPE' has not been declared 

21 E:\Documents\School\Computing\SDD\Assign#2\Projects\random.cpp expected `;' before "item" 

30 E:\Documents\School\Computing\SDD\Assign#2\Projects\random.cpp `item' undeclared (first use this function) 
+3

我是這麼認爲的需要有行編號功能 – Anycorn 2012-02-23 06:48:03

+0

你所說的「呼叫」意思?我認爲你首先根據你似乎想要做的事來判斷結構是什麼,這讓你感到非常困惑。你必須確定你瞭解事物類型和事物類型之間的差異。 – 2012-02-23 06:50:45

+0

我希望每個座位都有不同的物品和價格列表,我認爲嵌入式結構是實現這一目標的方式。 prehaps嵌入式環和歸零的ITM_TYPE stuct(刪除父stuct到)將用於項目投入,然後座位進步 – Arcticfoxx 2012-02-23 07:02:07

回答

1

使用本

ST_SEATS::ITM_TYPE st_seats; 
+0

的工作,工作正常,謝謝你,但我需要ST_SEATS是可變的像ITM_TYPE是 – Arcticfoxx 2012-02-23 06:53:37

+0

然後使用typeof運算或同等學歷。 – Anycorn 2012-02-23 06:56:53

0

seat[1]不是類型。進入內部型槽ST_SEATS::ITM_TYPE

注意:使用C++ 11層的功能使你可以有也說decltype(seat[1])::ITM_TYPE

1

類型ITM_TYPE存在只是一次,在ST_SEATS範圍。 ST_SEATS的每個實例沒有不同的類型。因此它是

ST_SEATS::ITM_TYPE item[N_ITEMS]; 

但是請注意,你的結構ST_SEATS實際上是空的(它不包含任何成員)的正確的方式來定義的數組。它只作爲一個命名空間。因此,你應該通過一個命名空間替換:

namespace ST_SEATS 
{ 
    struct ITM_TYPE 
    { 
    string name; 
    float price;  
    }; 
} 

好了,現在我注意到,你實際上定義的3 ST_SEATS數組,但數組根本不使用。我現在懷疑你可能預計你的ITM_TYPE陣列爲成員ST_SEATS。但是在那種情況下,你必須直接在struct定義中聲明這樣一個成員。

而且現在我注意到,你的數組的大小是一個變量。這在C++中是不可能的(儘管如此,有些編譯器提供它作爲本地數組的擴展)。所以我覺得現在你實際上想要的就是:

#include <vector> 

struct ST_SEATS{ 
    struct ITM_TYPE { 
    string name; 
    float price;  
    }; 
    std::vector<ITM_TYPE> items; // a vector is basically a dynamic array 
}; 

int main() 
{ 
    cout << "Enter number of items: "; 
    cin >> N_ITEMS; 
    ST_SEATS seat[3]; 
    seat[1].items.resize(N_ITEMS); 
    std::string name = ""; 
    std::string input; 
    float price; 
    for (int i=0; i < N_ITEMS; ++i) 
    { 
    std::cout << "Input item name: "; 
    std::cin >> input; 
    seat[1].items[i].name = input; 
    std::cout << "item[" << i << "].name SET" << std::endl; 
    std::cout << "Input item price: "; 
    std::cin >> price; 
    seat[1].item[i].price = price; 
    std::cout << "item[" << i << "].price SET" << std::endl; 
    } 

    for (int i=0; i < N_ITEMS; ++i) 
    { 
    std::cout << "item[" << i << "].name = " << seat[1].items[i].name << std::endl; 
    std::cout << "item[" << i << "].price = " << seat[1].items[i].price << std::endl; 
    } 
    system("pause"); 
} 
+0

我可以使用名稱空間,如 名稱空間SEAT [i] ? – Arcticfoxx 2012-02-23 07:02:58

+0

@ Arcticfoxx:不,但是你實際上並沒有使用這個數組(除了定義你的'item'數組),所以當我最初寫我的答案時我並沒有真正注意到它。看看我現在認爲你真正想要的內容。 – celtschk 2012-02-23 07:09:06