可能重复:
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
答案 0 :(得分:0)
bitman.cpp
中的返回类型与bitman.h
中的返回类型不同,因此链接器在bitman.h
中找不到声明的实现。
因此它无法将呼叫者链接到被呼叫者。
根据您使用该功能的方式,我建议将char
替换为unsigned int
,以获取countBits
中bitman.h
的返回类型。
旁注:printf的参数没有类型检查。所以无论如何,你不能指望编译器知道应该调用unsigned int
重载,因为你将%i
放在printf
中。无论如何,返回类型没有超载。
第二方注意:如果您正在使用C ++,请使用流(std::cout
&amp; co。)而不是C风格的printf。另外,请使用new
代替malloc
,依此类推。
第三方注意:您没有free
malloc
!