LNK2019代码错误

时间:2012-12-28 14:07:58

标签: c visual-studio lnk2019

  

可能重复:
  What is an undefined reference/unresolved external symbol error and how do I fix it?

当我尝试编译代码时,LNK2019错误不断弹出。所有论据都是正确的,所以我没有看到任何问题。有谁知道如何解决这个问题?

  

错误:LNK2019:未解析的外部符号“char __cdecl   函数_main

中引用的countBits(char *)“(?countBits @@ YADPAD @ Z)

的main.cpp

#include <stdio.h>
#include <Windows.h>
#include "bitman.h"
int main()
{
    int i;
    char* string = (char*)malloc(9);
    string = "12345678";
    printf("%i\n", countBits(string));
    for (i = 0; i < 9; i++)
    {
        printf("%x-", string[i]);
    }
    getchar();
}

bitman.cpp

unsigned int countBits(char* invoer)
{
    char buf;
    unsigned int i, i2, teller = 0;
    for (i = 0; i < strlen(invoer); i++)
    {
        for (i2 = 0; i < 7; i++)
        {
            buf = invoer[i];
            buf &= (1 << i2);
            if (buf == 1)
            {
                teller++;
            }
        }
    }
    return teller;
}

bitman.h

#ifndef BIT_MANIPULATION

#define BIT_MANIPULATION
char testBit(unsigned char byte, char place);
unsigned char setBit(unsigned char byte, char place);
unsigned char clearBit(unsigned char byte, char place);
unsigned char toggleBit(unsigned char byte, char place);
unsigned char rol(unsigned char byte);
unsigned char ror(unsigned char byte);
char countBits(char invoer);
char countBits(char* invoer);

#endif

1 个答案:

答案 0 :(得分:0)

bitman.cpp中的返回类型与bitman.h中的返回类型不同,因此链接器在bitman.h中找不到声明的实现。

因此它无法将呼叫者链接到被呼叫者。

根据您使用该功能的方式,我建议将char替换为unsigned int,以获取countBitsbitman.h的返回类型。

旁注:printf的参数没有类型检查。所以无论如何,你不能指望编译器知道应该调用unsigned int重载,因为你将%i放在printf中。无论如何,返回类型没有超载。

第二方注意:如果您正在使用C ++,请使用流(std::cout&amp; co。)而不是C风格的printf。另外,请使用new代替malloc,依此类推。

第三方注意:您没有free malloc