c - 出现 Unresolved external symbol 错误

标签 c visual-studio

我正在尝试一些代码。这是我的主要内容:

#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/

相关文章:

c -/net/ipmr.c中的MFC_HASH

c - 在 Visual Studio 中编写 C 代码

c# - 你调用的对象是空的。 -资源.resx

c# - 类自身内部的实例

c++ - 如何在 C 中反转以下算法

c - 在 C 中使用转置的矩阵乘法

c - C语言如何退出控制台屏幕

c++ - 尽管使用 EXTERN "C",但从 C++ 调用 C 函数时出现链接器错误

c++ - 无论如何我可以在 visual studio 2005 上使用 visual studio 2015 运行一个已经编码的项目

c# - 如何使用 licenses.licx 文件