現在,這讓我難過了幾個小時,因爲我在數學或代碼中看不到任何問題。 (Dispite盯着它和工作它一遍又一遍,以確保)我希望你們這些人能幫助我,這裏是我的代碼:爲什麼std :: bitset :: at()拋出out_of_range?
#define SOLVE_POSITION(x, y, z) (z*16 + y*4 + x)
std::bitset<64> block;
block.reset();
for(int z = 0; z < 4; ++z){
for(int y = 0; y < 4; ++y){
for(int x = 0; x < 4; ++x){
if(block.at(SOLVE_POSITION(3-x, y, 3-z))){ //<-- call to at() throws 'out_of_range'
// do stuff
};
};
};
};
隨着z
爲0,這兩個最內部的for循環然後,一旦z
變爲1,那麼當std :: bitset < 64> :: at()時拋出異常。
的z
,y
,x
的值是分別1
,0
,0
的那一刻。
你能告訴我這裏發生了什麼事情導致這個異常嗎? 在此先感謝!
......哇,我覺得就像我直接走進了一個陷阱!謝謝,它終於現在工作! –
@Clairvoire:問題是爲什麼你會在這裏使用一個宏,因爲它有所有的機會搞砸它。 –
那麼,用括號,它工作正常。如果我避免了所有可能會搞砸的事情,我就不會成爲C++程序員。 :P –