我正在尝试一些代码。这是我的主要内容:
#include "stdafx.h"
#include "ByteStream.h"
int _tmain(int argc, _TCHAR* argv[])
{
uint8_t x[28];
ByteStream b;
ByteStreamInit(&b, x, 28);
for(int i = 0; i<28; i++)
{
ByteStreamAdvance(&b,1);
}
return 0;
}
相关的.c和.h文件:
// Bytestream.h
#include <stdint.h>
/*
* Bytestream data structure
*/
typedef struct
{
uint8_t * data;
uint32_t length;
uint32_t offset;
} ByteStream;
uint32_t ByteStreamNrOfAvailElements(ByteStream *bs);
int32_t ByteStreamInit(ByteStream *bs, uint8_t *data, uint32_t len);
int32_t ByteStreamCurrPos(ByteStream *bs);
int32_t ByteStreamAdvance(ByteStream *bs, uint32_t n);
.c 文件:
#include "ByteStream.h"
int32_t ByteStreamInit(ByteStream *bs, uint8_t *data, uint32_t len)
{
if (!bs)
return -1;
bs->data = data;
bs->length = len;
bs->offset = 0;
return 0;
}
uint32_t ByteStreamNrOfAvailElements(ByteStream *bs)
{
return bs->length - bs->offset;
}
int32_t ByteStreamCurrPos(ByteStream *bs)
{
return bs->offset;
}
int32_t ByteStreamAdvance(ByteStream *bs, uint32_t n)
{
if(n >= ByteStreamNrOfAvailElements(bs)) // We can move only forward -1 number of available elements
return -1;
bs->offset+=n;
return 0;
}
我收到此错误:
Error 1 error LNK2019: unresolved external symbol "int __cdecl ByteStreamInit(struct ByteStream *,unsigned char *,unsigned int)" (?ByteStreamInit@@YAHPAUByteStream@@PAEI@Z) referenced in function _wmain c:\Users\documents\visual studio 2012\Projects\ConsoleApplication7\ConsoleApplication7\ConsoleApplication7.obj ConsoleApplication7
Error 2 error LNK2019: unresolved external symbol "int __cdecl ByteStreamAdvance(struct ByteStream *,unsigned int)" (?ByteStreamAdvance@@YAHPAUByteStream@@I@Z) referenced in function _wmain c:\Users\documents\visual studio 2012\Projects\ConsoleApplication7\ConsoleApplication7\ConsoleApplication7.obj ConsoleApplication7
Error 3 error LNK1120: 2 unresolved externals c:\users\documents\visual studio 2012\Projects\ConsoleApplication7\Debug\ConsoleApplication7.exe 1 1 ConsoleApplication7
为什么?
最佳答案
这看起来像是链接器错误。您没有正确编译您的程序。仅包含 header 并不能告诉编译器如何查找声明的函数和变量的代码。
但是,这也可能是 C++ 与 C 的问题。如果您的 main()
编译为 C++,那么您必须将 C header 的 #include
包装在 extern "C"{ ... }
.
当然,如果是 C++,那么将 Bitstream
实现为 C 模块而不是实际的类就显得非常不正统了。
关于c - 出现 Unresolved external symbol 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22629228/