2015-03-25 190 views
0

我有字符串的指針數組:指針指向在C的字符串指針數組++

string *names = new string[numOfNames]; 

即陣列,然後用從文件的值填充。我正在嘗試按字母順序排列名稱,所以我試圖將另一個指針數組分配給指向每個單獨元素名稱的地址。所以,我想要做這樣的事情:

string *namesPtr = new string[numOfNames]; 
namesPtr[0] = &names[0]; 

但是我得到一個紅色波浪上了等號說

沒有運營商「=」這些操作數相匹配,操作數類型的std :: string =的std :: string *

我有名字的一個指針數組,因爲numOfNames會在我要打開的文件,並從我的理解來指定,規則的陣列將無法工作,因爲我必須指定數組中的元素數量。

+0

什麼是「指針數組」?你的意思是「指向動態分配數組的指針」嗎? – immibis 2015-03-25 03:52:22

+0

@immibis是的,我意識到這一點,並恥辱地刪除了我的評論。 – riodoro1 2015-03-25 03:54:34

+0

是的,我的意思是一個指向動態分配數組的指針。有沒有這個詞? – Jumpman 2015-03-25 04:00:29

回答

0

當然有一個類型不匹配。

namesPtr[0]的類型是string
&names[0]的類型是string*

你需要的是:

string** namesPtr = new string*[numOfNames]; 
namesPtr[0] = &names[0]; 

爲了使指針賦值完成後,您需要:

for (int i = 0; i < numNames; ++i) 
{ 
    namesPtr[i] = &names[i]; 
} 
+0

那麼雙星號會讓namesPtr [i]成爲一個指針? – Jumpman 2015-03-25 04:02:51

+0

@Jumpman,這是正確的。 – 2015-03-25 04:03:26

+0

非常感謝!我會贊成你,但我還沒有足夠的代表:/ – Jumpman 2015-03-25 04:10:39

0
namesPtr[0] = &names[0]; 

這是不正確。 &將產生名稱中解除引用的字符串的地址,因此您正在爲非法字符串分配地址。