在CPP

2013-11-22 34 views
-6

動態改變的屬性的值I具有結構:在CPP

struct Person{ 
    int scoreone; 
    int scoretwo; 
    int scoretotal; 
} 
main(){ 
    Person a; 
    a.scoreone=3; 
    a.scoretwo=5; 
    //and later 
    a.scoreone=10; 
} 

欲當scoreone和scoretwo在不使用任何函數chnaged要更新的scoretotal。 謝謝

+1

請更多代碼? & 你有什麼問題 ? – Blacktempel

+4

請選擇一種語言。這是C還是C++?我建議C++。 – Oswald

+0

除了不清楚你正在編碼哪種語言,你的'main'是不對的。爲'main'使用正確的聲明。 –

回答

1

不能做 - 自動改變一個值,你需要運行一些代碼,(用C或C++)代碼總是在一個函數。

這個答案的其餘部分假定使用C++,並且根本不會在C中工作。

你可以,但是,保持一個事實,即它是被外部可見,一個函數,它(我猜)是你關心什麼:

struct Person { 
    int scoreone; 
    int scoretwo; 

    class total { 
     int *a, *b; 
    public: 
     total(int *a, int *b) : a(a), b(b) {} 
     operator int() { return *a + *b; } 
    } scoretotal; 

    Person() : scoretotal(&scoreone, &scoretwo) {} 
}; 

這確實有一個(通常是輕微的)側影響。它取決於從Person::totalint的隱式轉換以完成其工作。這可能會在幾種情況下導致意想不到的結果。一種情況是,如果您試圖在您希望從int到其他類型的隱式轉換的情況下使用some_person.scoretotal。您已經在使用從Person::totalint的隱式轉換,編譯器將只隱式使用一個用戶定義的轉換,否則將失敗。另一方面,如果您要使用auto x = some_person.scoretotal;,x將是Person::total而不是int,因爲auto會推導出實際類型,而不會發生隱式轉換。

只要你做的比較明顯的事情,如:

Person some_person; 

some_person.scoreone = 1; 
some_person.scoretwo = 2; 

int total = some_person.scoretotal; 

std::cout << "Total score: " << some_person.scoretotal; 

...你會得到scoretotal跟蹤總數的scoreonescoretwo沒有使它明顯,一個函數被調用做。

6

這不能用C++來完成。 C++的方式來處理這是scoretotal轉換爲方法

struct Person{ 
    int scoreone; 
    int scoretwo; 
    int scoretotal() { return scoreone + scoretwo; } 
}; 

現在,而不是說person.scoretotal你說person.scoretotal()和總成績每次都將重新計算。

+0

爲什麼我的編譯器抱怨'struct Person'在我想打印時沒有名爲'scoretotal'的成員? – moeCake

1

無論您使用何種語言,基本問題都在於您的struct的設計。在這個結構中只有兩個獨立的數據值。但是你正在存儲三個。這是錯誤的。

您需要存儲的只是兩個主要值scoreonescoretwo。那些是data。另一個值是由總和等於總和scoreone + scoretwo的關係定義的派生值。

所以你應該刪除數據成員scoretotal,並用一個函數替換它,如果你使用C語言編寫的話,或者如果你使用C++編碼,則使用成員函數。在C代碼可能是這樣的:

struct Person{ 
    int scoreone; 
    int scoretwo; 
}; 

int scoretotal(const struct Person person) 
{ 
    return person.scoreone + person.scoretwo; 
} 
0

如果你按照約翰在答案中所做的方式聲明struct Person,那麼在調用scoretotal函數時不應該出現錯誤。請記住括括號,說「person.scoretotal」將不起作用,你必須寫「person.scoretotal()」,因爲你在Person-struct中調用一個函數,而不是要求成員。