2011-06-23 126 views
1

我有兩種不同的結構。第一種是從.txt文件讀取數據的astm,第二種是使用結構體1中的值讀取用戶輸入並進行計算。 stmct astm將充當菜單。我的問題是,我如何將struct astm的值傳遞給struct rebar?C++如何將值從一個結構傳遞到另一個結構?

這裏有兩種結構:

這裏是.txt文件(實際的文件不包含 「SZ」, 「重量」 或 「直徑」):

sz wt diameter 
2 0.167 0.250 
3 0.376 0.375 
4 0.668 0.500 
5 1.043 0.625 
6 1.502 0.750 
7 2.044 0.875 
8 2.670 1.000 
9 3.400 1.128 
10 4.303 1.27 
11 5.313 1.41 
14 7.65 1.693 
18 13.6 2.257 

實施例: 選擇大小:4 Enther長度:500

尺寸:4 直徑:0.500 總重量=長度*瓦特八= 3340.0

+0

聽起來像指針工作。我想如果你內部的結構成員定義爲指針,然後只是分享它們之間的實際值,那就行了。雖然可能會給你一些漂亮的繩索,讓自己依靠。 –

+1

你的struct聲明是c樣式的,所以這真的是C++嗎? – crashmstr

+1

目前尚不清楚你想要達到的目標。 「將struct astm的值傳遞給struct rebar」是什麼意思? –

回答

0

您可能會重載賦值運算符。

但要小心,操作符重載並不總是最好的方法。

也許,轉換函數或成員函數是更好的選擇。

1

要回答你的問題:

astm myAstm; 
myAstm.size = 5; 
myAstm.weight = 30.0; 
myAstm.diameter = 10; 

rebar myRebar; 
myRebar.size = myAstm.size; 
myRebar.length = someCalculation(...) 

然而,更好的方法是讓一個嵌入到其他:

typedef struct 
{ 
    int size; 
    double weight; 
    double diameter; 
} astm; 

typedef struct 
{ 
    astm *myAstm; 
    double length; // user input 
} rebar; 

這樣做,這樣會導致更少的冗餘數據躺在身邊,它可以讓你傳遞一個代表一切的結構。

astm myAstm; 
myAstm.size = 5; 
myAstm.weight = 30.0; 
myAstm.diameter = 10; 

rebar myRebar; 
myRebar.myAstm = &myAstm; 
myRebar.length = someCalculation(...) 

// To get at the size attribute: 
printf("size is %d\n", myRebar.myAstm->size); 
0

重載賦值運算符是一種可能的路線,但不是很多人不喜歡這個。您也可以直接將它們傳遞給成員變量。

objRebar.size = objastm.size; 

或者你可以把它們變成類並添加一個成員函數來處理它。是否有必要使用結構?

+0

是的,我必須使用一個結構。 –

+0

@Stephen羅傑斯:它是否也有成員函數? –

0

理想情況下,您希望有一張地圖根據尺寸查找重量/直徑。 由於您使用的是C++,因此請看std::maphttp://www.cplusplus.com/reference/stl/map/)。

變化astm閱讀每個sz txt文件只double weight, diameter;當持有,做一個map.insert(pair<int,astm>(sz,astm_var));

計算時,只需查找從mapastm和評價它的總重量。

0

我將通過創建一個函數解決這個問題:

void MoveInfo(const Astm &t, ReBar &bar); 

但要做到這一點,你需要有適當提供的結構名稱:

struct Astm { ... }; 
struct ReBar { ... }; 

通知的結構名的位置。

0

如果螺紋鋼採用ASTM直接(和你實際使用C++),你就會有這樣的事情:

struct astm 
{ 
    astm(int size, float weight, float diameter) 
    : size(size) 
    , weight(weight) 
    , diameter(diameter) 
    {} 

    int size; 
    double weight; 
    double diameter; 
}; 

struct rebar 
{ 
    rebar(int size, double length) 
    : size(size) 
    , length(length) 
    {} 

    rebar(const astm& astm) //<<< Uses astm directly 
    : size(astm.size) 
    { 
     // Do something with rest of astm 
    } 
}; 

然而,這似乎並不如此。聽起來像你想要的東西,如:

std::vector<rebar> rebarVec; 
    for (int i = 0; i < numThings; ++i) 
    { 
     // Compute stuff from astm[ i ] 
     rebar rebarItem(size, length); 
     rebarVec.push_back(rebarItem); 
    } 

這是你想要完成?

相關問題