user2990134
user2990134

Reputation:

Error LNK2019: unsresolved external symbol

Hey I'm getting this error and I'm not sure why. I'm pretty new to C so hopefully it won't be too complicated.

heres my main

#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;
}

and now my two other files

#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;
}

and

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;
}

the output I'm getting is error LNK2019: unresolved external symbol _verifyMIPS referenced in function _main

I'm also using the Microsoft Visual Studios developer command prompt for all of this. Thanks for your help!

EDIT: new problem, When I run the code, and I put in 32 characters, it will not run verifyMIPSInstructions or binToDec. It will only give me the error that it doesn't have 32 characters when it clearly does. Any advice?

Upvotes: 0

Views: 96

Answers (1)

Mahonri Moriancumer
Mahonri Moriancumer

Reputation: 6003

I agree with the linker. I don't see the verifyMIPS() function ether. Perhaps main() should call verifyMIPSInstruction() instead?

Upvotes: 2

Related Questions