简体   繁体   中英

Visual Studio (2015) C Project dependency - LNK1561 entry point must be defined

I have the following main program in a C project, which (the idea) uses a header and a utils file from another project in the same solution. The header file on consists of the declaration of the function found in the utils file (as you will see below)

Main function:

#include <stdio.h>
#include "header1C.h"
#include "utils_1C.c"
#include <stdbool.h>

int main() {
    int num = 0, base = 0, rKey; 
    do {
        bool chk = false; //flag for while loop to check if base is correct
        printf("\nEnter number [Enter -1 to exit]: ");
        scanf_s("%d", &num); //number to be changed
        if (num != -1) {
            do {
                printf("Enter new base [2,4,8 or 16]: ");
                scanf_s("%d", &base); //new base [2,4,8,16]
             if ((base != 2) && (base != 4) && (base != 8) && (base != 16)){                  
                printf("Number must be either 2,4,8 or 16\n");
                }
                else chk = true; //set flag to true
            } while (chk == false);
            newBase(num, base); //calls newBase() with parameters num and base
        }
        rKey = getchar(); //getchar to clear char buffer
        if (num == -1)
            printf("\n[Press any key to exit]");
        rKey = getchar(); //readkey to exit programm on any key press
    } while (num != -1); //to be repeated until num entered by user is -1
return 0;
}

In a seperate project called Library:

Header file header1C.h:

char checkHex(int n);

void newBase(int n, int b);

Utilities file utils_1C.c:

#include "header1C.h"

char checkHex(int n) { //used by newBase() - converts given number to letters if larger than 9
    switch (n) {
    case 10: return 'A';  //return A if n = 10
    case 11: return 'B';  //return B if n = 11
    case 12: return 'C';  //return C if n = 12
    case 13: return 'D';  //return D if n = 13
    case 14: return 'E';  //return E if n = 14
    case 15: return 'F';  //return F if n = 15
    }
    return n; //return given number if < 10
}

void newBase(int n, int b) {

    static char newNum[50];       //array in which the number is stored (array of remainders)
    int i = 0;                    //counter
    do {                          //long division and gathering of remainder
        newNum[i] = checkHex(n % b);  //calling checkHex() to check number and conert to letter if needed
        n = n / b; //divide n by b
        i++; //counter + 1
    } while (n >= b); //loop stops when n is smaller than it's divider b
    newNum[i] = checkHex(n); //calling checkHex()

    printf("\nNumber in base %d: ", b); //flipped number - proper answer
    for (i; i >= 0; i--) { //loop stops when smaller than 0
        if ((newNum[i] >= 65) && (newNum[i] <= 70))  //check if newNum[i] is a letter [A-F]
            printf("%c", newNum[i]);  //output if letter
        else
            printf("%d", newNum[i]);  //output if number
    }
}

I am getting this error:

Error LNK1561 entry point must be defined Library C:\\Users...\\Assignments\\Library\\LINK 1

I have added the Library as a project dependency to the project which has the main function, and I have also played around with the

Properties -> Configuration Properties -> Linker -> System -> SubSystem

following other answers I found on Stack Overflow, but with no luck.

At this point I don't know what to do, and frankly I didn't think it was going to be this much of a problem (though I may be missing something?)

Apologies for the long question, and help is greatly appreciated.

When compiling the code using C++ the linker expects an int main() .

As you define main() as returning void the linker does not find the program's entry point.

C++ does know about functions' return types, the functions' signatures, as opposed to C.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM