1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > c++/visual studio常见问题【1】

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

时间:2019-11-05 21:54:15

相关推荐

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 visibleint main() {std::cout << f() << std::endl; // C3861}// C3861_a2.cppint f() { // declared and defined herereturn 42;}

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。