2017-12-16 1 views
-2

매개 변수가 char* 인 생성자가 있으며 간단한 수학 연산을 만들고 싶습니다. 나는 더 쉽게 만들 수있는 생성자 int[]/int*에 새로운 매개 변수를 추가하려고 생각했습니다.C++ Constructor from char * ~ int []/int *

헤더 :

class BigNum { 
    char *value; 
    int* arr; 

    public: 
     BigNum(char*, int * = 0) {}; 
     BigNum(); 
}; 

CPP :

BigNum::BigNum(char* value, int *tab){ 
    int length = sizeof(value)/sizeof(char*); 
    for (int i = 0; i < length; i++) { 
     arr[i] = value[i]; 
    } 
} 

나는 이런 식으로 뭔가를 할 수 있습니까? 그것은 심지어 컴파일되지 않습니다. 이 샘플에서 수행 할 수있는 작업은 char* ~ int입니다.

+0

왜 널 charecter까지 길이 모양과 당신은 어떤을 가지고 있지 탭이 값과 길이가 같지 않으면 정의되지 않은 동작이 발생합니다. –

+0

Int * 무엇이되어야합니까? – DiCri

+0

스택 오버플로에 오신 것을 환영합니다. 질문을 게시하기 전에 도움말 섹션을 읽어보십시오. 귀하의 질문이 끔찍한 첫 번째 질문은 아니지만, 나는 당신이 성취하려는 것을 이해하지 못합니다. 예를 들어 질문의 시작 부분에 추가 할 수 있을까요? –

답변

1

는 심지어 두 번 BigNum(char*, int *)을 정의하기 때문에이 컴파일되지 않습니다

를 컴파일 할 수 없습니다. 한 번 머리말에서, 그리고 원본 파일에서.

해결 방법 : 한 번만 생성자를 정의하십시오. 추가 힌트 : 프로그램이 컴파일되지 않으면 컴파일러에서 진단 메시지의 이유를 알려줍니다.


이것은 당신이하지 생각하지 않습니다 value의 유형 char* 때문에

int length = sizeof(value)/sizeof(char*); 

length

는 항상 1이됩니다. 나는 당신의 의도가 value이 배열을 가리키고 그 배열의 길이를 계산하고자한다고 생각합니다. 글쎄, 포인터의 배열에서 배열의 길이를 계산하는 것은 불가능합니다.

해결 방법 : a) 배열의 길이를 인수로 전달하거나 b) 배열을 종료 된 문자열로 지정해야합니다.이 경우 종료 문자가 나타날 때까지 문자열을 반복하여 길이를 계산할 수 있습니다 녹이다.


당신은 arr를 초기화하지 않고 arr[i] 액세스 :

arr[i] = value[i]; 

동작은 정의되지 않습니다.

솔루션 : 배열을 할당해야합니다. 내가 뭘 할 수 int로이 샘플 변화의 char *에에 할


.

변경 방법에 따라 다릅니다. 뾰족한 문자 숫자를 int으로 변환하려면 숫자가 모든 기본 문자 인코딩 (C++에서 지원됨)에서 순차적이어야한다는 사실을 사용할 수 있습니다.그 사실에서, 우리는 숫자 문자가 나타내는 0 문자의 값에서 숫자 문자의 값을 뺀, 우리는 숫자 값을 얻을 수 있음을 알고

char* c = address_of_some_digit; 
int value_of_digit = '0' - *c;