c++/visual studio常见问题【1】

1 LNK2001错误

参考Linker Tools Error LNK2001 | Microsoft Docs

无法解析的外部符号"符号"。说明程序中用到的某个符号,链接器无法在任何库或者obj对象文件中找到。

原因:

1)编码方面的原因

a) 变量名称不一致,比如一个文件里定义了var1,在另一个文件里却使用VAR1。

b) 在源代码中使用内联函数,此时该函数从文件外部无法访问。应该在头文件中定义内联函数。

c) 从c++程序中调用c函数,由于编译器对c/c++函数命名不同,所以出现错误。需要在c函数前加上exern "C"。

d) 类的静态成员未初始化。

2) 编译链接方面的原因

a) 未添加相应的lib文件;

b) release和debug模式不匹配。比如,在release模式下调用debug模式编译的库。

变量和函数需要定义(defined),即需要被分配了相应的存储空间或者有函数实现的代码段。此外,c++链接器在命名中会在变量或函数名上加上类型信息等,因此如果声明和定义的类型信息不匹配,会出现错误。

比如,项目中文件有c,c++,会出现Lnk2001错误。或者把c改名cpp.

c) include一个头文件,但没有添加相应的cpp文件。

d) 调用的函数名与定义函数名称不一致。比如main中用a(),但函数定义为A()。

2 error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?


依次展开:配置属性》C/C++》预编译头,在右侧选择不使用预编译头

3 C3861 找不到标识符

1)没有包含命名空间

2)没有加类限定符

// C3861_a1.cpp
// Compile with: cl /EHsc /W4 C3861_a1.cpp C3861_a2.cpp
#include <iostream>
// Uncomment the following line to fix:
// int f();  // declaration makes external function visible
int main() {
   std::cout << f() << std::endl;    // C3861
}

// C3861_a2.cpp
int f() {  // declared and defined here
   return 42;
}

如上两个文件。如果a1.cpp中没有int f()这一行,出现c3861错误。补充该声明,编译器自动将对应函数链接?

lnk2019,明明有这个函数的定义,却说找不到符号。有可能是inline函数位置不对,应该放在头文件中。

 c++和fortran交叉编译外部符号无法解析:pow2o3,需要添加libmmd.lib,for_stop_core_quiet,需要添加libifcore。intel_sse2_strrchr,需要添加libirc。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值