2010-04-20 3 views
0

왜이 오류가 발생하는지 잘 모르겠습니다. 나는 다음과 같습니다int에서 int 로의 변환이 잘못되었습니다. ** C++

int* arr = new int[25]; 

int* foo(){ 
    int* i; 
    cout << "Enter an integer:"; 
    cin >> *i; 
    return i; 
} 

void test(int** myInt){ 
    *myInt = foo(); 
} 

This call here is where I get the error: 

test(arr[0]); //here i get invalid conversion from int to int** 
+2

이것은 컴파일 오류의 원인이 아니지만 'foo()'에 논리 오류가 있습니다. 포인터를 선언했지만 초기화하지 마십시오. 이 함수를 실행하면 충돌이 일어납니다. –

+0

잘하면 충돌합니다. 그것은 그렇지 않을 수도 있습니다. 그것은 어느 정도 악화 될 것입니다. 초기화되지 않은 포인터 == baaaaad. –

+0

함수 포인터와 멤버 포인터에 대한 태그를 제거했습니다. 귀하의 질문은 데이터 포인터에 관한 것입니다. –

답변

7

당신이 그것을 쓴 방법, testint에 대한 포인터에 대한 포인터를 필요하지만 arr[0] 그냥 int입니다.

그러나 foo에서 int을 묻는 메시지가 표시되지만 초기화되지 않은 포인터의 값인 위치로 읽는 중입니다. 나는 당신이 foo을 읽고 돌려주고 싶다고 생각했을 것입니다. int.

예. 테스트는 INT (즉 void test(int* myInt)) 포인터을하는 것이 나을 이때

int foo() { 
    int i; 
    cout << "Enter an integer:"; 
    cin >> i; 
    return i; 
} 

.

그러면 동적으로 할당하는 int 중 하나에 대한 포인터를 전달할 수 있습니다.

test(&arr[0]); 
관련 문제