2011-05-31 50 views
1

由於某種原因,我創建的值modkeygen中變爲0,儘管在製作和運行keygen後是正確的。我不明白爲什麼。誰能告訴我?值無理由變爲0

class RC5{ 
    private: 
     uint64_t w, r, b; 
     uint128_t mod; 
     std::string mode; 
     std::vector <uint64_t> S; 

    public: 
     RC5(std::string KEY, std::string MODE, uint64_t W = 32, uint64_t R = 12, uint64_t B = 16){ 
      uint128_t mod = 1; 
      mod <<= W; 
      mode = MODE; 
      w = W; 
      r = R; 
      b = B; 
      std::cout << mod << std::endl;   // 1 << 32 
      keygen(KEY); 
      std::cout << mod << std::endl;   // 1 << 32 
     } 

     void keygen(std::string key){ 
      std::cout << mod << std::endl;   // 0 
      // lots of commented out stuff 
     } 
}; 

我相信uint128_t寫得不錯,所以這似乎沒有道理。如有必要,可以找到uint128_t here

回答

10

erm,因爲在ctor中您正在修改名爲mod的局部變量,這會影響您的班級成員。

+0

爲什麼我這麼失明? – calccrypto 2011-05-31 13:53:10

+1

@calccrypto,不要打擾你自己。我們已經在某個點或其他地方完成了這項工作......;) – Nim 2011-05-31 13:55:10

+1

@calccrypto,如果你有一個你堅持的命名約定,那麼它可能會使這樣的問題很容易被發現。有些人經常在類成員的任一端添加一個'_',這樣當你查看代碼時你就知道它是一個局部變量還是成員。 – Nim 2011-05-31 14:15:59

3

RC5

uint128_t mod = 1; 
mod <<= W; 

的這一部分創建一個新的局部變量mod隱藏類的成員。在keygen您使用其他mod