2012-06-28 35 views
-1

我正在處理表示託管數組的模板類。數據是我的數組。數據是我的數組。C++:無法將*轉換爲(*)[]在作業中

data = new E[size]; 

而這,它不喜歡。它拋出我;

無法將組件*轉換爲組件*(*)[]賦值爲 什麼給出了?

也任何人都可以解釋爲什麼E用*表示,即使我沒有將指針類型傳入我的模板類型?

+0

根據您的編輯,我在響應已經解決了這個問題。你的第一個問題是誤導性的,你需要調用'new E * [size];'你還需要將'data'變成'E **',因爲你不能指定給數組。 –

+0

@EdS。我的編輯是在託尼給了我一些指示(沒有雙關意圖)的事實之後。我原來的問題依然存在。這就是爲什麼我再次刪除它。但現在一切正常。 – Sidar

回答

1

只是讓你的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_; 
}; 
+0

您可以在答案中添加更多內容嗎?我不確定你是什麼意思。 – Sidar

+0

拋出我:componentA *賦值給ComponentA的不兼容類型[0] – Sidar

+0

@Sidar:我無法想象你是如何管理的;-)。我已經充實了幾個說明函數.... –

3
E (*data)[]; 

data是一個指針到E的陣列,而不是一個指針E(和不被用指針的陣列到E混淆)。有一個非常明顯的差異。

編輯:爲了幫助您瞭解...

new將返回給你一個指針E,你們又宣佈data作爲指針陣列電。一個數組是C中的一個類型!它不是簡單的僞裝指針。在某些情況下,一個數組可能會衰減變成指針,但它並不是雙向的。

編輯2:

每您的評論:

我是,我是創建電子指針的新陣列的印象?

轉到http://cdecl.org/

首先,在類型:

int (*data)[]; 

念出來。現在鍵入:

int *data[]; 

再次閱讀並注意它不是說同樣的事情。一個是指向int數組的指針,一個是指向int的指針數組。巨大差距。

如果您要動態分配的指針數組,然後data應被聲明爲:

E **data; 

然後

data = new E*[size]; 
+0

我知道那個... – Sidar

+0

@Sidar:那爲什麼混淆?指向E數組的指針*完全和完全*不同於指向E的指針。C中的數組是它自己的類型,它不是一個簡單的掩碼指針(儘管它可以在某些情況下*衰減成指針) –

+0

我的印象是我正在創建一個新的E指針數組? – Sidar

相關問題