在函数问题中使用字符串的动态数组

时间:2014-02-13 07:28:10

标签: c++ arrays pointers

我正在尝试运行一个使用字符串的动态数组,但是当我通过一个函数推送它时,我得到编译错误'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:矢量可能更好,但我担心这不是一个选择。请仅提供处理指针的修复程序。

3 个答案:

答案 0 :(得分:0)

您需要在头文件中加入<string>

顺便说一下,你的代码中可能存在潜在的内存泄漏,如果moreString为true,dynamicArray将指向另一个新的字符串数组,而不删除当前的数组。

答案 1 :(得分: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;
        }
    }
}

答案 2 :(得分:0)

我看到一个比缺少的include和using子句更大的问题......

您写道:

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?