簡體   English   中英

C ++雙數組初始化錯誤

[英]C++ Double Array Initialization Error

我有這個C ++程序:

int box[9][9];
box = {  {solution[0][0],solution[0][1],solution[0][2],solution[1][0],solution[1][1],solution[1][2],solution[2][0],solution[2][1],solution[2][2]},
                          {solution[0][3],solution[0][4],solution[0][5],solution[1][3],solution[1][4],solution[1][5],solution[2][3],solution[2][4],solution[2][5]},
                          {solution[0][6],solution[0][7],solution[0][8],solution[1][6],solution[1][7],solution[1][8],solution[2][6],solution[2][7],solution[2][8]},
                          {solution[3][0],solution[3][1],solution[3][2],solution[4][0],solution[4][1],solution[4][2],solution[5][0],solution[5][1],solution[5][2]},
                          {solution[3][3],solution[3][4],solution[3][5],solution[4][3],solution[4][4],solution[4][5],solution[5][3],solution[5][4],solution[5][5]},
                          {solution[3][6],solution[3][7],solution[3][8],solution[4][6],solution[4][7],solution[4][8],solution[5][6],solution[5][7],solution[5][8]},
                          {solution[6][0],solution[6][1],solution[6][2],solution[7][0],solution[7][1],solution[7][2],solution[8][0],solution[8][1],solution[8][2]},
                          {solution[6][3],solution[6][4],solution[6][5],solution[7][3],solution[7][4],solution[7][5],solution[8][3],solution[8][4],solution[8][5]},
                          {solution[6][6],solution[6][7],solution[6][8],solution[7][6],solution[7][7],solution[7][8],solution[8][6],solution[8][7],solution[8][8]}};

我得到的錯誤是:

error: assigning to an array from an initializer list

這意味着什么?

聲明變量時必須使用初始化程序:

int box[9][9]= {  {solution[0][0],solution[0][1],solution[0][2],solution[1][0],solution[1][1],solution[1][2],solution[2][0],solution[2][1],solution[2][2]},
                          {solution[0][3],solution[0][4],solution[0][5],solution[1][3],solution[1][4],solution[1][5],solution[2][3],solution[2][4],solution[2][5]},
                          {solution[0][6],solution[0][7],solution[0][8],solution[1][6],solution[1][7],solution[1][8],solution[2][6],solution[2][7],solution[2][8]},
                          {solution[3][0],solution[3][1],solution[3][2],solution[4][0],solution[4][1],solution[4][2],solution[5][0],solution[5][1],solution[5][2]},
                          {solution[3][3],solution[3][4],solution[3][5],solution[4][3],solution[4][4],solution[4][5],solution[5][3],solution[5][4],solution[5][5]},
                          {solution[3][6],solution[3][7],solution[3][8],solution[4][6],solution[4][7],solution[4][8],solution[5][6],solution[5][7],solution[5][8]},
                          {solution[6][0],solution[6][1],solution[6][2],solution[7][0],solution[7][1],solution[7][2],solution[8][0],solution[8][1],solution[8][2]},
                          {solution[6][3],solution[6][4],solution[6][5],solution[7][3],solution[7][4],solution[7][5],solution[8][3],solution[8][4],solution[8][5]},
                          {solution[6][6],solution[6][7],solution[6][8],solution[7][6],solution[7][7],solution[7][8],solution[8][6],solution[8][7],solution[8][8]}};

此C ++錯誤:

error: assigning to an array from an initializer list

引起的原因是您試圖為數組分配不允許的初始化程序。 創建數組時會進行初始化,並在創建數組時將值壓入其中。 當已經創建數組並將新值放入其中時,就會發生分配。 初始化或分配期間可以執行的操作之間有區別。

這是導致上述錯誤的最簡單的代碼:

#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
    int myarray [] = {1,2,4};
    myarray [] = {2,5,9};
    //error, cannot assign with an initializer.
    //You can't initialize an array that's already been initialized.
    return 0;
}

如果要在其中強制輸入新值,請嘗試std::copy

int myarray [] = {1,2,3,4};
int newarray [] = {2,5,9,12};

//copy the first 4 elements from newarray into newarray
std::copy(newarray, newarray + 4, myarray);

for(int x = 0; x < 4; x++){
    cout << myarray[x] << ",";
}

打印: 2,5,9,12,

但是然后您應該問自己,為什么要像這樣在金屬上接近編程。

考慮使用std :: vector代替

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv) {
    vector<int> array;
    cout << "size is: " << array.size() << endl;
    array.push_back(42);
    cout << "size is: " << array.size() << endl;
    cout << "data items: " << array.at(0) << endl;
    array.insert(array.begin(), 5);
    array.insert(array.end(), 20);
    cout << "size is: " << array.size() << endl;
    int len = array.size();
    for(int x = 0; x < array.size(); x++){
      cout << "data item: " << array.at(x) << endl;
    }
    return 0;
}

打印此:

size is: 0
size is: 1
data items: 42
size is: 3
data item: 5
data item: 42
data item: 20

使用C ++向量重新初始化列表

#include <iostream>
#include <vector>
using namespace std;
int main() 
{
  int foobar[3] = {1, 2, 3};
  std::vector<int> myvector(foobar, foobar + 3);

  int moobar[3] = {4, 5, 6};
  myvector.assign(moobar, moobar + 3);

  for(int x = 0; x < 3; x++)
      cout << myvector[x];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM