2017-12-21 8 views
0

이것은 생성자의 char 배열을 초기화하는 중에 오류가 발생합니다. 나는 문자열로 초기화하려고 시도했지만 모두 헛된 것입니다. 좋은 도움을 주시면 감사하겠습니다.C++의 생성자에서 c- 배열 초기화 오류

#include <iostream> 
using namespace std; 
class employe 
{ 
    char name[30]; 
    int id; 
public: 
    employe(int a, char b[30]) :id(a), name(b) 
    { 

    } 
    char getid() 
    { 
     return name; 
    } 

}; 
+0

관련없는 메모에서 [using namespace std;'] (https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice)를하지 마십시오. 특히 [헤더 파일에 없습니다] (https://stackoverflow.com/questions/14575799/using-namespace-std-in-a-header-file). –

답변

1

문제 배열은 함수로 전달되는 경우 다음 (생성자 단지 함수)이다이를 것 감쇠는 첫 번째 요소에 대한 포인터. 생성자의 인수 b을 의미

정말 포인터 (유형 char*), 당신은 포인터의 배열을 초기화 할 수 없습니다.

가장 간단한 해결책은 생성자 몸체 내부 배열 포인터를 복사하는 것입니다

// Copy the string from b to name 
// Don't copy out of bounds of name, and don't copy more than the string in b contains (plus terminator) 
std::copy_n(b, std::min(strlen(b) + 1, sizeof name), name); 

더 나은 솔루션은 문자열에 대한 std::string을 사용하는 것입니다, 그리고 당신이 시도처럼 당신은 초기화 할 수 있습니다 지금.

+0

고마워요. 이거 작동했습니다. –

+0

@ KashifMehmood3314-FBASBSSEF1 문제가 해결되어 해결되었으므로 답장 옆에있는 확인란을 클릭하여이 문제를 수락 한 것으로 간주하십시오. 그리고 [도움말 페이지] (http://stackoverflow.com/help)와 [Stack Overflow 둘러보기] (http://stackoverflow.com/tour)를 읽어보십시오. –