2014-04-14 1 views
0

안녕하세요.이 오류가 발생하며 이유가 확실하지 않습니다. 나는 C에 꽤 익숙해있어서 잘만되면 너무 복잡하지 않을 것이다.오류 LNK2019 : 확인되지 않은 외부 기호

을 heres 내 주요

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include "binToDec.c" 
#include "verifyMIPS.c" 

int binToDec(char string[], int begin, int end); 
int verifyMIPS (char string[]); 

int main(int argc, char *argv[]) 
{ 
    char buffer[BUFSIZ]; 
    FILE* fptr;       /* file pointer */ 
    int lineNum = 0; 
    int i; 
    char *count;  

    /* Was a file passed in a parameter (e.g., on the command line)? */ 
    if (argc == 2) 
    { 
     /* Open the file for reading */ 
     if ((fptr = fopen (argv[1], "r")) == NULL) 
     { 
      fprintf (stderr, "Error: Cannot open file %s.\n", argv[1]); 
      return 1; 
     } 
    } 
    else /* No file passed in; use standard input. */ 
     fptr = stdin; 

    /* Continuously read next line of input until EOF is encountered. 
    * Each line should contain only 32 characters and newline. 
    */ 
    while (fgets (buffer, BUFSIZ, fptr)) /* fgets returns NULL if EOF */ 
    { 
     lineNum++; 

     if (strlen (buffer) == 33 && buffer[32] == '\n') 
      buffer[32] = '\0';  /* convert newline to null byte */ 
     else 
     { 
      (void) fprintf (stderr, 
         "Error: line %d does not have 32 chars.\n", lineNum); 
      continue;    /* error: get next line */ 
     } 

     /* Verify that the string is 32 0's and 1's. If it is, do 
     * various tests to ensure that binToDec works correctly. 
     * If the string contains invalid characters, print an error 
     * message. 
     */ 
     /* CODE MISSING !!! */ 
     int i; 
     for(i=0; i<33; i++) 
     { 
      if(verifyMIPS(buffer[i])==1) 
      { 
       binToDec(buffer[i],0,32);  
      } 
      else 
      { 
       (void) fprintf (stderr, 
         "Error: line %d does not have 32 chars.\n", lineNum); 
       continue;    /* error: get next line */ 
      } 
     } 


    } 

    /* End-of-file encountered; close the file. */ 
    fclose (fptr); 
    return 0; 
} 

지금 내 두 개의 다른 파일

#include <string.h> 

int verifyMIPSInstruction (char * instr) 
    /* returns 1 if instr contains 32 characters representing binary 
    * digits ('0' and '1'); 0 otherwise 
    */ 
{ 
    int i; 
    for(i = 0; i<32; i++) 
    { 
     if(instr[i] == '1' || instr[i] == '0') 
     { 
       return 1; 
     }      
    } 
    if(instr[32] != '\0') 
    { 
     (void) printf("is not an instruction"); 
    } 
    return 0; 
} 

int binToDec(char string[], int begin, int end) 
{ 
    int i, remainder; 
    int j = 1; 
    int decimal = 0; 
    i = atoi(string); 

    while(i !=0) 
    { 
     remainder = i%10; 
     decimal = decimal+remainder*j; 
     j=j*2; 
     i = i/10; 
    } 
    printf("equivalent decimal value: %i", decimal); 

    return decimal; 
} 

는 내가 갖는 출력은 오류 LNK2019입니다 : 확인되지 않은 외부 기호 _verifyMIPS 함수 _main에서 참조 됨

나는 또한이 모든 것을 위해 Microsoft Visual Studios 개발자 명령 프롬프트를 사용하고 있습니다. 도움 주셔서 감사합니다.

편집 : 새로운 문제, 코드를 실행할 때 32 문자를 넣으면 verifyMIPSInstructions 또는 binToDec가 실행되지 않습니다. 그것은 분명히 나에게 32 문자가 없다는 오류만을 줄 것이다. 어떤 충고?

+0

대부분의 사람들은 대부분 C 소스 파일을'#include '하지 않습니다. 일반적으로 소스 코드가 아니라 헤더를 포함합니다. –

+0

한 가지 가능성은 CRLF 줄 끝이 있고 그 파일이 바이너리 모드로 처리되고 있으므로''\ n ''앞에''\ r ''이 있기 때문에 줄이 더 길어진 것처럼 보입니다. 나는 그것이 문제가되어야한다고 생각하지 않는다. fopen()에서' "rb"'를 지정하지는 않지만'stdin'에 영향을 줄 수 있습니다. 그러나 올바른 길이를 얻지 못한다면 진단 결과는 (a) 길이를보고해야하며, (b) 입력 된 각 문자를 16 진수 (' "% 3x"')로 인쇄해야합니다. '% c'를 사용하여 컴퓨터가 가지고있는 생각을 볼 수 있고 생각했던 것과 그것을 비교할 수 있습니다. –

답변

2

나는 링커에 동의합니다. 나는 verifyMIPS() 함수 에테르를 보지 못했다. 대체로 main() 일 경우 verifyMIPSInstruction()으로 전화해야할까요?

+0

아, 잠이 좀 필요해. 고마워요. –

+0

글쎄, 이제는 새로운 문제가 생겼어. 내 질문을 편집 할게. –