C++: error LNK2019: 未解析的外部符号

标签 c++ c visual-c++

<分区>

以下代码会产生此错误:

error LNK2019: unresolved external symbol "char const * __cdecl nameOnly(char const *)"

代码:

const char* nameOnly(const char* namewpath)
{
    const char* res = namewpath + strlen(namewpath);
    while (res > namewpath) {
        const char* tmp = res - 1;
        if (*tmp == '/' || *tmp == '\\') break;
        --res;
    }
    return res;
}

上面的代码是一个普通的 c 文件,我正在用 visual-C++ 编译它。 使用 C 编译器编译时,我没有收到此错误。

更新: 我试过使用 extern:

extern "C"{ 
 const char* nameOnly(const char* namewpath)
 {
    ...
    }
    return res;
 }
}

我得到这个错误:

error C2059: syntax error : 'string'

最佳答案

听起来像是函数声明和函数定义之间的区别。

当你说“这段代码是纯 C”时,如果头文件包含在 C++ 实现文件中时,如果声明被 extern C { ... } 包围,那么它就是纯 C , 否则名称重整开始起作用,我认为这就是这个错误的原因。

关于C++: error LNK2019: 未解析的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18636599/

相关文章:

c++ - 使用 std::vector::assign() 将 vector 的一部分分配给自身

c - scanf 和 printf 不打印正确的值

c - 编译 Clewn 时出现错误

c++ - 函数传递参数时遇到无效的八进制格式

c++ - Windows 无法加载位图图像

c++ - 无需注册 DLL 即可解决 C4772 错误的任何方法?

c++ - Visual Studio : How to specify different runtime libraries for the linker?(/MTd、MDd 等)

c - SCSI 通用 write() 线程安全吗?

.net - 为什么.NET 4.0 在加载非托管 DLL 时会出现 "CRT not initialized"错误?

c++ - 如何在 Windows 上用 Vim 运行 “:compiler msvc” 和 “:comp msbuild”?