2011-02-17 56 views
2

一個結構我是新手在C++和我有問題使用成員函數CNetwork::CNetwork初始化我的容器occ_stat_tinitilizing與輸入參數

我想這是錯誤的行:occ_stat[0](num_elements_) , occ_stat[1](num_elements_)但我真的不知道如何正確地寫它。

我想了解如何初始化我的結構,在每個occ_statoccupied_counter將包含n元素和mean_life_time將賦值0

我希望得到任何幫助。

問候

#include <iostream> 
#include <boost/multi_array.hpp> 
#include <cstdint> 

typedef boost::multi_array< uint32_t , 1> uint32_1d_t; 

struct occ_stat_t { 
    occ_stat_t (uint32_t n): 
      occupied_counter(boost::extents[n]) {} 

    uint32_1d_t occupied_counter; 
    double  mean_life_time; 
}; 

class CNetwork { 
public: 
    CNetwork (uint32_t num_elements_); 

private: 
    occ_stat_t occ_stat[2]; 

}; 

CNetwork::CNetwork (uint32_t num_elements_) 
: occ_stat[0](num_elements_) , occ_stat[1](num_elements_) 
{ 
    // do something 
} 

int main() { 

    uint8_t foo = 5; 
    CNetwork Network(foo); 

    return 0; 

} 
+0

我使用GNU ++ 0x中的標準(不知道是什麼樣的差異的C++ 0x) – Eagle

+0

倒不如重新定義結構爲一類? (與初始化方法) – Eagle

回答

1

我不知道是否有可能訪問初始化列表數組下標。除非在C++ 0x - 你是 - 但不是在VS 2010中,因爲它沒有在那裏實現。

所以你得:

CNetwork::CNetwork (uint32_t num_elements_) 
{ 
    occ_stat[0].occupied_counter = boost::extents[num_elements_]; 
    occ_stat[1].occupied_counter = boost::extents[num_elements_]; 

    //or 

    occ_stat[0] = occ_stat_t(num_elements_); 
    occ_stat[1] = occ_stat_t(num_elements_); 

    // do something 
} 

編輯:

好了,所以你還必須加一個默認的構造函數,因爲我們對其進行初始化在初始化列表中,那麼:

在基本數組
struct occ_stat_t { 

    occ_stat_t() : occupied_countr(/*default_to_whatever_boost_extents is*/){}; 

    /* Don't need this one we default construct now 
    occ_stat_t (uint32_t n): 
      occupied_counter(boost::extents[n]) {} 
    */ 

    uint32_1d_t occupied_counter; 
    double  mean_life_time; 
}; 
+0

感謝您的回答,但沒有工作...或許真的在你的答案被丟失,因爲你留在第二行「:」 – Eagle

+0

現在它正在努力:)(我不明白升壓編譯錯誤) – Eagle

+0

@Eagle很高興它的工作。我只是編譯VS2010和提高1.44,它的工作。我收到了一堆警告,但沒有錯誤。如果此答案解決了您的問題,請將其標記爲答案。 – RedX

0

元件被構造與他們的默認構造函數。所以你不能像這樣初始化這樣的數據成員。

但是,爲什麼你需要一個數組[2]數據成員occ_stat? 會不會是更好有2名成員更具體的名字?

class CNetwork { 
public: 
    CNetwork (uint32_t num_elements_); 

private: 
    occ_stat_t occ_stat_for_somthing; 
    occ_stat_t occ_stat_for_another; 

}; 

CNetwork::CNetwork (uint32_t num_elements_) 
: 
    occ_stat_for_something(num_elements_) , 
    occ_stat_for_another(num_elements_) 
{ 
} 
+0

謝謝你的回答。你是寫這本書能解決我的問題(我昨天申請),但在功能上的成員(不屬於此例的一部分)它更容易使用的for循環,而不是寫代碼的兩倍。也許還有另一種方式來暗示它,但因爲我是新手,我又覺得容易多了一個數組...謝謝 – Eagle