[英]How to initialize array of classes with deleted copy constructor (C++11)
[英]How to initialize a dynamically sized array in C++11 standard?
這是我的一段代碼。
int** n;
for (int i = 0; i < N; ++i){
int size;
cin >> size;
int* n[i] = new int[size]; //line 13
for (int j = 0; j < size; ++j){
cin >> n[i][j];
}
}
這是編譯期間彈出的錯誤。
solution.cc:在函數'int main()'中:
solution.cc:13:33:error:數組必須用括號括起的初始值設定項初始化
int * n [i] = new int [size];
我意識到這可以使用向量來完成,因為它們在動態處理內存方面要好得多。 但我不允許使用向量來應對這一挑戰。 我被允許使用的唯一標題是“iostream”。
我讀到,在C ++ 11中,語法已被修改為new:
p = new T [N] {initializer1, ..., initializerN};
來源: https : //en.wikipedia.org/wiki/New_and_delete_(C%2B%2B)#Overview
但我的代碼仍然會為類似的變體產生相同的錯誤。
有沒有辦法完全繞過初始化錯誤? 如果不是,則假設將值初始化為優選地相同的值。
我相信(恕我直言)你不是在尋找真正的問題。
你已經聲明了一個雙指針:
int** n;
然后你忘記為指針數組分配內存,例如:
n = new int*[N]
在為數組(指針)的每個指針分配內存之前,必須執行此步驟。
而且,我相信你的路線應該是:
n[i] = new int[size]
否則你要重新聲明n + i的類型。
這應該可以解決您的問題。
int** n = new int*[N];
for (int i = 0; i < N; ++i){
int size;
cin >> size;
n[i] = new int[size];
for (int j = 0; j < size; ++j){
cin >> n[i][j];
}
}
幫自己一個忙,停止使用原始指針。 盡可能使用std::vector
代替原始數組 - 沿着這些方向:
std::vector<std::vector<int>> n(N);
for (int i = 0; i < N; ++i){
int size;
cin >> size;
n[i].resize(size);
for (int j = 0; j < size; ++j){
cin >> n[i][j];
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.