我寫的這段代碼,為什么是有錯誤的?
template<size_t num>
class node_map{
private:
node node_m[num][num]{node()};
bool have_touch[num][num]{false};
public:
#if 1
void show_all()
{
for(int i=0;i<=num-1;++i)
{
for(int j=0;j<=num-1;++j)
cout<<node_m[i][j].around_num<<" ";
cout<<endl;
}
}//test
#endif
void set_all()
{
static default_random_engine de;
static uniform_int_distribution<unsigned int> u(0,num-1);
int bomb_num;
switch(num)
{
case 10:
bomb_num=15;
break;
case 20:
bomb_num=40;
break;
case 30:
bomb_num=70;
break;
}
while(bomb_num!=0)
{
f:
int p=u(de);
int q=u(de);
if(node_m[p][q].have_bomb)
goto f;
node_m[p][q].have_bomb=true;
node_m[p][q].around_num=0;
--bomb_num;
}
node_m[0][0].around_num=(node_m[1][0].have_bomb?1:0)
+(node_m[0][1].have_bomb?1:0)+(node_m[1][1].
have_bomb?1:0);
node_m[0][num-1].around_num=(node_m[0][num-2].
have_bomb?1:0)+(node_m[1][num-1].have_bomb?1:0)
+(node_m[1][num-2].have_bomb?1:0);
node_m[num-1][0].around_num=(node_m[num-2][0].
have_bomb?1:0)+(node_m[num-1][1].have_bomb?1:0)+
(node_m[num-2][1].have_bomb?1:0);
node_m[num-1][num-1].around_num=(node_m[num-2]
[num-1].have_bomb?1:0)+(node_m[num-1][num-2].
have_bomb?1:0)+(node_m[num-2][num-2].have_bomb?1:0);
for(int i=1;i<=num-2;++i)
{
node_m[0][i].around_num=(node_m[0][i-1].
have_bomb?1:0)+(node_m[1][i-1].have_bomb?1:0)+
(node_m[1][i].have_bomb?1:0)+(node_m[1][i+1].
have_bomb?1:0)+(node_m[0][i+1].have_bomb?1:0);
node_m[i][0].around_num=(node_m[i-1][0].
have_bomb?1:0)+(node_m[i-1][1].have_bomb?1:0)+
(node_m[i][1].have_bomb?1:0)+(node_m[i+1][1].
have_bomb?1:0)+(node_m[i+1][0].have_bomb?1:0);
node_m[num-1][i].around_num=(node_m[num-1][i-1].
have_bomb?1:0)+(node_m[num-2][i-1].have_bomb?1:
0)+(node_m[num-2][i].have_bomb?1:0)+(node_m[
num-2][i+1].have_bomb?1:0)+(node_m[num-1][i+1].
have_bomb?1:0);
node_m[i][num-1].around_num=(node_m[i-1][num-1].
have_bomb?1:0)+(node_m[i-1][num-2].have_bomb?1:
0)+(node_m[i][num-2].have_bomb?1:0)+(node_m[
i+1][num-2].have_bomb?1:0)+(node_m[i+1][num-1].
have_bomb?1:0);
}
for(int i=1;i<=num-2;++i)
for(int j=1;j<=num-2;++j)
node_m[i][j].around_num=(node_m[i-1][j].
have_bomb?1:0)+(node_m[i-1][j-1].have_bomb
?1:0)+(node_m[i][j-1].have_bomb?1:0)+(
node_m[i+1][j-1].have_bomb?1:0)+(node_m[
i+1][j].have_bomb?1:0)+(node_m[i+1][j+1].
have_bomb?1:0)+(node_m[i][j+1].have_bomb?1
:0)+(node_m[i-1][j-1].have_bomb?1:0);
}
};
int main()
{
node_map<10> n;
try{
n.set_all();
n.show_all();
}catch(exception& e){
cout<<"error!"<<endl;
}
return 0;
}//test code
報錯為:
E:\私人資訊\VS_2019_C++\小游戲開發\掃雷單機版.cpp In constructor 'constexpr node_map<10ull>::node_map()':
43 7 E:\私人資訊\VS_2019_C++\小游戲開發\掃雷單機版.cpp [Error] array must be initialized with a brace-enclosed initializer
43 7 E:\私人資訊\VS_2019_C++\小游戲開發\掃雷單機版.cpp [Error] array must be initialized with a brace-enclosed initializer
E:\私人資訊\VS_2019_C++\小游戲開發\掃雷單機版.cpp In function 'int main()':
134 15 E:\私人資訊\VS_2019_C++\小游戲開發\掃雷單機版.cpp [Note] synthesized method 'constexpr node_map<10ull>::node_map()' first required here
我的陣列初識化應該沒有問題吧
看一下開頭node_m和have_touch的定義就行了
uj5u.com熱心網友回復:
錯誤的意思就是你沒有初始化。uj5u.com熱心網友回復:
我無法復現這個問題。在添加正確的頭檔案和using指令以及一個正確的node類之后不會出現如上的問題。
uj5u.com熱心網友回復:
我不是已經初始化了嗎
uj5u.com熱心網友回復:
沒用過,可能是在類頭檔案里面有初始化的?不確定。不知道,抱歉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17602.html
標籤:C++ 語言
上一篇:vtk中如何實作:對單獨一個Actor進行滑鼠拖動,旋轉等互動的問題
下一篇:C++ 數列
