我正在處理表示託管數組的模板類。數據是我的數組。數據是我的數組。C++:無法將*轉換爲(*)[]在作業中
data = new E[size];
而這,它不喜歡。它拋出我;
無法將組件*轉換爲組件*(*)[]賦值爲 什麼給出了?
也任何人都可以解釋爲什麼E用*表示,即使我沒有將指針類型傳入我的模板類型?
我正在處理表示託管數組的模板類。數據是我的數組。數據是我的數組。C++:無法將*轉換爲(*)[]在作業中
data = new E[size];
而這,它不喜歡。它拋出我;
無法將組件*轉換爲組件*(*)[]賦值爲 什麼給出了?
也任何人都可以解釋爲什麼E用*表示,即使我沒有將指針類型傳入我的模板類型?
只是讓你的data
成員E*
。您仍然可以索引數組樣式ala data[i]
(該表示法與指針和整數值一起使用時,基本上意味着添加指針,並且指向指向對象的大小)。
編輯:
template <typename E>
class X
{
X(int initial_size) : data_(new E[initial_size]), size_(initial_size) { }
X(const X& rhs) : data_(new E[rhs.size_]), size_(rhs.size_) { std::copy(...); }
~X() { delete[] data_; }
void capacity(int new_size)
{
E* p = new E[new_size];
std::copy(p, p + new_size, data_);
delete[] data_;
data_ = p;
size_ = size;
}
...
private:
E* data_;
int size_;
};
E (*data)[];
data
是一個指針到E的陣列,而不是一個指針E(和不被用指針的陣列到E混淆)。有一個非常明顯的差異。
編輯:爲了幫助您瞭解...
new
將返回給你一個指針E
,你們又宣佈data
作爲指針陣列電的。一個數組是C中的一個類型!它不是簡單的僞裝指針。在某些情況下,一個數組可能會衰減變成指針,但它並不是雙向的。
編輯2:
每您的評論:
我是,我是創建電子指針的新陣列的印象?
首先,在類型:
int (*data)[];
念出來。現在鍵入:
int *data[];
再次閱讀並注意它不是說同樣的事情。一個是指向int數組的指針,一個是指向int的指針數組。巨大差距。
如果您要動態分配的指針數組,然後data
應被聲明爲:
E **data;
然後
data = new E*[size];
根據您的編輯,我在響應已經解決了這個問題。你的第一個問題是誤導性的,你需要調用'new E * [size];'你還需要將'data'變成'E **',因爲你不能指定給數組。 –
@EdS。我的編輯是在託尼給了我一些指示(沒有雙關意圖)的事實之後。我原來的問題依然存在。這就是爲什麼我再次刪除它。但現在一切正常。 – Sidar