2014-02-13 42 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?