2010-02-03 3 views
1

이 코드에 오류가 발생했습니다. 'char와 char [13]의 대입에서 호환되지 않는 타입이 배열을 초기화하고이 작업을 수행하는 방법을 알 수 없습니다. 기본적으로이 프로그램은 ISBN 코드 (4 개의 정수 그룹과 각 그룹 사이에 '-'가있는 하나의 문자열)를 가져 와서 올바른지 확인합니다. 이 프로그램은 ISBN 클래스와 실제 ISBN 코드를로드하고 ISBN 클래스를 사용하여이를 테스트하려고하는 주 함수를 사용합니다. 여기에 내가 가진 것이있다.char 할당에 호환되지 않는 유형이 있습니까?

class ISBN { 
private: 
char group[6];       
char publisher[8];      
char book[8];      
char check; 
char isbn[13]; 
char compute_check(); 

public: 
ISBN(); 
ISBN(char newisbn[]);    
ISBN(char group[ ], char publisher[ ], char book[ ], char check);          
bool valid();       
char *getpublisher();     
void print(ostream &o);     
}; 

ISBN::ISBN(char newisbn[]) : isbn(newisbn) {} 

이 프로그램은 내가 ISBN 클래스에 ISBN 코드를 변환하는 데 문제가

strcpy(isbns[index++], "1-57676-074-X"); 
ISBN isbn(isbns[i]); 
isbn.print(cout); 
if (isbn.valid()) 

... 인쇄 다음이 ISBN 번호 등을로드하고 다음과 같은 방법으로 클래스 ISBN을 사용하여 테스트 그래서 이들 각각의 기능에 의해 작동 될 수 있습니다. 도움이 많이 감사! 감사!

+2

오류 코드 줄은 무엇입니까? –

답변

7

이 :

ISBN::ISBN(char newisbn[]) : isbn(newisbn) {} 

당신이 원하는 것을하지 않습니다. 여러분이 들었을지라도 배열은 포인터와 동일하지 않습니다. 생성자는 포인터 (배열로 위장 된)를 가져 와서 실제 배열을 초기화하는 데 사용하려고합니다. 당신이 필요합니다 :

ISBN::ISBN(char newisbn[]) { 
    strcpy(isbn, newisbn); 
} 

일반적인 문자열 처리 요구를 위해 std :: string 클래스를 조사 할 것을 제안합니다.

+0

닐 감사합니다, 정확히 내가 알아야 할 필요가 있습니다! – Spencer

2

ISBN::ISBN(char newisbn[]) : isbn(newisbn) {}

넌 * CHAR하여 숯 [13]을 초기화 할 수있다. 당신은이

수동을 문자, 복사 :

ISBN::ISBN(char newisbn[]) { strcpy(isbn, newisbn); }

0

C++에 문자열을 저장하는 직선 전달 방법은 정말로 단지 당신이 필요로하는 경우

const char* group = "Group"; 

추가 문자열 기능은 string class을 조사합니다.

+0

그다지 안전하지는 않습니다. 그것은 정적 메모리 섹션에 재발행되었습니다. (이름을 잘못 입력 한 경우 수정하십시오.) 16 진수 편집기를 사용하는 모든 사람은 "그룹"문자열을 볼 수 있습니다. 그러지 마. –

+0

@the_drow 1)'group'은 런타임에 설정 될 수 있습니다. 2)하지만 뭐라구? 그것은'사적인'이 무엇에 관한 것이 아닙니다. –

+0

1) 아니, const 일 수 없습니다. 2) 어떤 비공개입니까? 이것은 OOP와는 아무런 관련이 없습니다. –

0

C/C++에서는 배열을 배열의 첫 번째 요소에 대한 포인터로 취급 할 수 있습니다. 따라서 배열이 아닌 생성자 매개 변수에서 포인터를 사용하십시오. 예 :

ISBN::ISBN(const char* newisbn) 
{ 
    strcpy(isbn, newisbn); 
} 
관련 문제