2014-02-13 41 views
0

我試圖運行一個使用字符串的動態數組,但是當我通過函數推送它時,出現編譯錯誤'dynamicArray': undeclared identifier,'string':undeclared identifierillegal use of type 'void'。出於某種原因,所有這些錯誤都指向了標題。在函數中使用字符串的動態數組問題

我所說的指針位置:

string* dynamicArray = NULL; 

我調用該函數在這裏:

populateArray(dynamicArray); 

什麼是頭:

void populateArray(string *&dynamicArray); 

功能:

void populateArray(string *&dynamicArray) 
{ 
char decide; 
bool moreStrings = true; 
int counter = 0; 
while (moreStrings == true) 
{ 
    counter ++; 
    dynamicArray = new string[counter]; 
    cout << "\nEnter your string here:"; 
    cin >> dynamicArray[counter - 1]; 
    cout << "\nDo you want to enter another string? Y/N:"; 
    cin >> decide; 
    decide = toupper(decide); 
    if (decide == 'N') 
    { 
     moreStrings = false; 
    } 
} 
} 

PS:向量可能會更好,但我恐怕這不是一個選項。請只提供處理指針的修復程序。

+0

你在哪裏做 「串* dynamicArray = NULL;」 ?你確定它不是錯誤地放在功能範圍之外的地方嗎? –

+1

字符串是來自std字符串庫嗎?你應該使用namespace std添加頭文件#include ,並且看起來新的字符串數組將覆蓋舊的字符串數組。 – michaeltang

+0

直到用戶輸入'N'時,您纔會覆蓋dynamicArray指針而不刪除它。 – rozina

回答

0

隨着#include <string>using namespace std;的增加,它編譯得很好。

#include <string> 
#include <iostream> 
using namespace std; 

void populateArray(string *&dynamicArray); 

int main(){ 
    string* dynamicArray = NULL; 
    populateArray(dynamicArray); 
    return 0; 
} 

void populateArray(string *&dynamicArray) 
{ 
    char decide; 
    bool moreStrings = true; 
    int counter = 0; 
    while (moreStrings == true) 
    { 
     counter ++; 
     dynamicArray = new string[counter]; 
     cout << "\nEnter your string here:"; 
     cin >> dynamicArray[counter - 1]; 
     cout << "\nDo you want to enter another string? Y/N:"; 
     cin >> decide; 
     decide = toupper(decide); 
     if (decide == 'N') 
     { 
      moreStrings = false; 
     } 
    } 
} 
0

您需要在頭文件中包含<string>

順便說一句,代碼中可能會有內存泄漏,如果moreString爲true,dynamicArray將指向另一個新的字符串數組,而不會刪除當前的字符串數組。

+0

也不要忘記'使用std :: string'。 – rozina

+0

是的,實際上'使用命名空間std;'就足夠了。 – jeffw

+0

但是不建議這樣做,因爲你引入了整個std命名空間。 – rozina

0

我看到比缺少一個更大的問題包括和使用條款等

您寫道:

dynamicArray = new string[counter]; 

但這每次都會分配一個新的內存區域爲您服務。它不會複製以前分配的元素。如果您不想使用std :: vector,則需要爲第一個元素使用malloc,然後調用realloc將以前分配的數據複製到新元素。

入住這種形式的詳細信息:What is C++ version of realloc(), to allocate the new buffer and copy the contents from the old one?