用VS2010编译的C++大作业出现了无法识别的外部符号BUG

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用VS2010编译的C++大作业出现了无法识别的外部符号BUG相关的知识,希望对你有一定的参考价值。

1>------ 已启动生成: 项目: gamep, 配置: Debug Win32 ------ 1>main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall skill::skill(void)" (??0skill@@QAE@XZ),该符号在函数 "public: __thiscall role::role(int,class std::basic_string ,class std::allocator >,int,int,int,int,int,int,int,int,int,int,class weapon * const,class medicine * const,class skill * const)" (??0role@@QAE@HV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HHHHHHHHHHQAVweapon@@QAVmedicine@@QAVskill@@@Z) 中被引用 1>main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall medicine::medicine(void)" (??0medicine@@QAE@XZ),该符号在函数 "public: __thiscall role::role(int,class std::basic_string ,class std::allocator >,int,int,int,int,int,int,int,int,int,int,class weapon * const,class medicine * const,class skill * const)" (??0role@@QAE@HV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HHHHHHHHHHQAVweapon@@QAVmedicine@@QAVskill@@@Z) 中被引用 1>main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall weapon::weapon(void)" (??0weapon@@QAE@XZ),该符号在函数 "public: __thiscall role::role(int,class std::basic_string ,class std::allocator >,int,int,int,int,int,int,int,int,int,int,class weapon * const,class medicine * const,class skill * const)" (??0role@@QAE@HV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HHHHHHHHHHQAVweapon@@QAVmedicine@@QAVskill@@@Z) 中被引用 1>C:\Users\ThinkPad\Desktop\gamep\Debug\gamep.exe : fatal error LNK1120: 3 个无法解析的外部命令 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

参考技术A skill(void)
weapon::weapon(void)
medicine::medicine
这几个函数在的源文件没引入这个工程吧,或者头文件里有,没有实现
再看看别人怎么说的。

mex 与 MATLAB2013a 无法识别的开关:-o

【中文标题】mex 与 MATLAB2013a 无法识别的开关:-o【英文标题】:mex with MATLAB2013a Unrecognized switch: -o 【发布时间】:2014-09-12 17:46:56 【问题描述】:

我正在尝试运行一个使用 mex 编译一些 c++ 代码的代码。 我已经使用 Microsoft Visual C++ 2010 设置了 mex。 但是当我执行该行时

mex -O fconv.cc -o fconv

我得到了错误

compile
    Usage: 
        MEX [option1 ... optionN] sourcefile1 [... sourcefileN] 
            [objectfile1 ... objectfileN] [libraryfile1 ... libraryfileN] 

    Use the -help option for more information, or consult the MATLAB API Guide. 




C:\PROGRA~1\MATLAB\R2011A\BIN\MEX.PL: Error: Unrecognized switch: -o. 

我用谷歌搜索了很多,但找不到任何有用的东西。如果有人可以在这里帮助我,那就太好了。我对使用 mex 的了解非常有限。

【问题讨论】:

【参考方案1】:

从R2013a docs for mex(和current version)来看,没有-o选项,但有-output

-output resultname 创建名为 resultname 的二进制 MEX 文件。自动附加适当的 MEX 文件扩展名。覆盖默认的 MEX 文件命名机制。

顺便说一句,除非您使用 -g,否则默认情况下大 O 选项 (-O) 处于启用状态。

请记住,mex 不是编译器,而是编译器的前端。它的语法与您可能用于编译器的语法大不相同。

【讨论】:

请注意:mex 曾经是 Perl 脚本 mex.pl 的前端,而后者又调用了编译器。从 R2014a 开始,这种情况发生了变化,现在它直接调用编译器(mex.exe 和内置 MATLAB 函数)。 @Amro 你确定吗?我正在运行 R2014b,使用函数语法时出现以下错误:C:\PROGRA~1\MATLAB\R2014B\BIN\MEX.PL: Error: Unrecognized switch: -outdir..。至少看起来那里还有一个MEX.PL @embert:我只是尝试在运行 Process Monitor 时编译一个示例 MEX 文件,但它根本没有触及 mex.pl 文件。我假设他们现在将其保留是为了向后兼容,以免使用 .BAT 文件而不是新的 .XML 文件破坏旧的配置系统......在我的情况下(Win8 上的 R2014b),MATLAB 首先加载库@ 987654339@,然后是libmexcmd.dll,最后直接通过cmd.exe调用Visual Studio编译器。没有执行任何 Perl 脚本... @Amro 所以你说这是因为我的版本是使用批处理文件配置的?如何从 .BAT 切换到 .XML 配置?我想它应该自己做这件事,因为它没有记录在任何地方,但不知何故它没有。也很奇怪:虽然 officially 不支持,但 R2014b 仍然与 VS2005 一起运行。 bin/win64/mexopts/ 中有 .BAT 和 .XML 文件。可能是因为这个旧的编译器没有模板,它只是利用了自己配置的.BAT。 @embert:我不知道,对我来说,上次升级我的 MATLAB 时它自动发生了。也许是因为 VS2005 旧/不受支持,因此退回到旧系统。如果您查看您的首选项文件夹 (winopen(prefdir)),您应该会看到新的 XML 配置文件:mex_*_win64.xml。旧的曾经被称为mexopts.batcompopts.bat。首先尝试运行mex -setup,否则尝试创建fresh profile(通过在启动MATLAB之前将环境变量MATLAB_PREFDIR设置为新位置)

以上是关于用VS2010编译的C++大作业出现了无法识别的外部符号BUG的主要内容,如果未能解决你的问题,请参考以下文章

mex 与 MATLAB2013a 无法识别的开关:-o

无法识别的属性“targetFramework”。请注意属性名称区分大小写

VS2010 c++编译的时候总是出现找不到exe文件、这是个啥情况

在vs中运行C++程序出现错误无法打开包括文件“iostream.h”

vs2015写c++不是内部或外部命令,也不是可运行的程序或批处理文件

VS2015C++文件编译错误,始终是这种情况。DEBUGE里面没有出现exe文件,我C#是正常的,就C++有问题