2014-10-30 3 views
0

프로그램에서 작업하고 있는데 "dosell '에 대한 정의되지 않은 참조가 계속 발생하며 어떤 일이 일어나는지 알 수 없습니다. 다음은 함수의 선언은 다음과 같습니다계속 ... "정의되지 않은 참조 ..."

void dosell(int *cash, int *numchips); 

함수의 사용 :의 시작 부분에 함수의 선언을 넣어

void dosell(int *cash, int *numchips) { 

    int numsell; 

    // Determine the number of chips to be sold. 
    printf("How many chips do you want to sell?\n"); 
    scanf("%d", &numsell); 

    // Print out the error message if this is too much. 
    if (numsell > *numchips) 
     printf("Sorry, you do not have that many chips. No chips sold.\n"); 

    // Execute the transaction. 
    else { 
     (*cash) += sellchips(numsell); 
     (*numchips) -= numsell; 
}}} 
+1

'void dosell (int * cash, int * numchips)'선언 또는 정의 ** ABOVE ** 'else if (choice == 2) ... dosell (& 현금, numchips); ? –

+2

'dosell()'은 호출과 같은 파일에 있습니까? 그렇지 않다면 프로그램을 만들기 위해 파일을 모두 (모두) 연결하고 있습니까? 마지막에는'}}} '과 함께 무엇이 있는가? 실수로 GCC 확장 - 중첩 된 함수를 사용하지 않는 한 구문 오류와 유사합니다. 정확한 오류 메시지를 표시 할 수 있습니까? 링커 오류 또는 컴파일러 오류입니까? –

+1

이것은 링커 오류입니다. 링커는'dosell()'의 정의/구현을 제공하는 객체를 놓친다. 그래서 prototyping, 선언은 여기에 문제가되지 않습니다, 친애하는 동료 commenters, 그 후자의 개조로 진정 컴파일러 전용. – alk

답변

0

:

choice = menu(); 

// Execute the appropriate choice. 
if (choice == 1) { 
    dobuy(&cash, &numchips); 
} 
else if (choice == 2) { 
    dosell(&cash, &numchips); 
} 

그리고 함수 자체 파일 즉, 주요 기능과 포함 및 뒤에 정의하기 전에 :

void dosell(int *cash, int *numchips) ; 
+0

좋은 추측이지만, OP가 그 문제를 확인하기에 충분한 정보를 제공하기 전까지, 아마도 조급 한 태도 일 것입니다 ... 아니요, downvote가 아니라 단지 도움이되는 제안입니다. –

+0

선언문은 질문에 언급되어 있습니다. –

+0

@JonathanLeffler하지만 넣어지는 곳은 ... – Igor

0

답변

에 키 의견 전송은 호출과 동일한 파일에 dosell()인가? 그렇지 않다면 프로그램을 만들기 위해 파일을 모두 (모두) 연결하고 있습니까?

의 끝 부분은 dosell()입니다. 실수로 GCC 확장자 — nested functions을 사용하지 않는 한 구문 오류와 같습니다.

GCC가 중첩 된 기능에 대한 경고를 표시하는 데 실제로 많은 노력이 필요합니다. -std=c11-pedantic과 같은 표준을 지정하면됩니다. 그러나 중첩 된 함수를 사용할 계획은 삼가 해주십시오.

나는 }}}을 살펴 봤는데, 그 중 하나가 잘못 배치되었다. 대괄호 중 하나는 dosell() 함수 바로 앞에있는 dobuy() 함수의 끝 부분에 있어야합니다. 이 때문에 dosell()dobuy() 내에 포함되어 있으므로 마치 dosell() 기능을 작성하지 않은 것처럼 보였습니다.

나는 당신의 코드가 자동 압자에 의해 들여 쓰기 된 경우, 당신은 dosell()의 시작 라인, 들여 쓰기되었다 아마도 어긋 나서 뭔가가 있음을 제보 한 것이다 것을 알 것입니다 관찰. 설명하는 증상은 중첩 된 기능과 정확히 일치합니다.