2014-02-13 6 views
0

문자열을 사용하는 동적 배열을 실행하려고하지만 함수를 통해 밀어 넣을 때 컴파일 오류 'dynamicArray': undeclared identifier, 'string':undeclared identifierillegal use of type 'void'이 발생합니다. 이러한 모든 오류는 어떤 이유로 헤더를 가리 킵니다.동적 배열 함수 문제에서 문자열 사용

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; 
    } 
} 
} 
내가 여기에 함수를 호출

string* dynamicArray = NULL; 

:

여기 포인터 전화

추신 : 벡터가 더 좋을지 모르지만 그게 옵션이 아닌 것 같습니다. 포인터를 다루는 픽스 만 제공하십시오.

+0

"문자열을 * dynamicArray = NULL;" ? 실수로 함수 범위 밖의 장소에 놓이지 않았습니까? –

+1

문자열이 std 문자열 라이브러리에서 왔습니까? #include 네임 스페이스 std를 사용하여 헤더 파일을 추가해야합니다. 새로운 문자열 배열이 이전 하나를 덮을 것 같습니다. – 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

네, 사실'using namespace 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?