gpt4 book ai didi

c++ - 这段代码有效,还是编译器?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:08:59 30 4
gpt4 key购买 nike

int cpu = 0;
int player = 0;

char * getPoints()
{
using namespace std;
string str = "You: ";
str += player;
str += " CPU: ";
str += cpu;
char c [100];
strcpy(c, str.c_str());
return c;
}

此代码无法编译。是代码有误还是我的编译器有问题?

我正在使用 Microsoft Visual StudioDarkGDK

如果是我,有人可以改进吗?


这是输出:

1>------ Build started: Project: Pong, Configuration: Debug Win32 ------
1>Compiling...
1>Main.cpp
1>c:\users\martijn\documents\visual studio 2008\projects\pong\pong\main.cpp(42) : warning C4172: returning address of local variable or temporary
1>Linking...
1>libcpmtd.lib(xdebug.obj) : warning LNK4098: defaultlib 'libcmt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
1>libcpmtd.lib(xdebug.obj) : error LNK2019: unresolved external symbol __malloc_dbg referenced in function "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z)
1>libcpmtd.lib(xdebug.obj) : error LNK2019: unresolved external symbol __free_dbg referenced in function "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z)
1>libcpmtd.lib(stdthrow.obj) : error LNK2019: unresolved external symbol __CrtDbgReportW referenced in function "void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)" (?_Debug_message@std@@YAXPB_W0I@Z)
1>Debug\Pong.exe : fatal error LNK1120: 3 unresolved externals
1>Build log was saved at "file://c:\Users\Martijn\Documents\Visual Studio 2008\Projects\Pong\Pong\Debug\BuildLog.htm"
1>Pong - 4 error(s), 2 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

最佳答案

LNK4098 错误表明您的构建正在混合使用 DEBUG 设置编译的代码(因此使用 libcmtd.lib)和使用非 DEBUG 设置编译的代码(因此使用 libcmt.lib)。

或者:它可以是使用静态运行时库 (libcmt.lib) 的代码与使用动态运行时库 (msvcrt.lib) 的代码混合使用。

然后链接器找到两个不同版本的公共(public)运行时库方法/类,并且无法确定使用哪个。您不能在一个构建中混合使用多个运行时库。

无论哪种情况,都是解决方案/项目设置问题。当我们尝试链接其他人提供的 libs/dll 时,我们遇到了这个问题,他们使用与我们使用的设置不同的设置构建它们。

/NODEFAULTLIB 参数(在 VS 链接器选项下作为“忽略库”或类似选项可用)允许您强制忽略一个或多个运行时库集,只留下一个运行时库集供使用。

关于c++ - 这段代码有效,还是编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2289168/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com