gpt4 book ai didi

c++ - 无法管理链接 cpp 文件 - 未解析的外部符号

转载 作者:行者123 更新时间:2023-11-28 07:15:21 25 4
gpt4 key购买 nike

我正在使用 Visual Studio 2008。我有一个包含几个项目的解决方案。在一个项目(我们称之为 ProjectX)中,我有这些文件:

头文件 (ExportProject.h) 如下所示:

#ifndef __CExportProject_H_INCLUDED__   
#define __CExportProject_H_INCLUDED__

class __declspec(dllimport) CExportProject{

string func1(... params1 ...);

void func2(... params2 ...);
}

#endif

和一个 cpp 文件 (ExportProject.cpp):

#include "ExportProject.h"

string CExportProject::func1(... params1 ...){
...
return "some string";
}

void CExportProject::func2(){
string str = func1(... params ...);
}

当我单独编译 ProjectX 时,没有任何问题。当我尝试编译包含 ProjectX 和其他一些项目的解决方案时,我收到此错误:(这包含函数的真实名称,我只是重命名它们以使问题更清楚)

PageWorkspace.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall CExportProject::ArgumentsToInApiString(class CInApiHash *,class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > > &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class CArgumentsCollection const *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (__imp_?ArgumentsToInApiString@CExportProject@@QAEXPAVCInApiHash@@AAV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PBVCArgumentsCollection@23@2@Z) referenced in function "protected: void __thiscall CWorkspacePage::OnExportAsInApi(void)" (?OnExportAsInApi@CWorkspacePage@@IAEXXZ)

很明显,这是一个链接问题。只是为了确保我尝试将实现移至 header 并且它有效。

此外,当我在 func2 函数中的 cpp 文件上右击对 func1 的调用并选择“Go To Definition”时,它需要我到头文件上的声明而不是 cpp 中的定义。

可能是什么原因?

更新

正如我之前所说,当实现被移动到 header 并删除 __declspec(dllimport) 时,它会起作用。使用 __declspec(dllimport) 它不起作用(Hans Passant 在 comment 中解释了原因)。

但即使没有 __declspec(dllimport) 当实现在 cpp 上时,我也会遇到同样的错误(当然错误代码中没有 __declspec(dllimport) 前缀)。这表明存在问题,不是吗?

最佳答案

好吧,我发现了问题,它与 __declspec(dllimport) 无关。

我在同一项目中定义的其他一些类中调用了 func2。此调用产生了错误。当我评论这个电话时,问题就消失了。func2 的参数之一是 CString& str。显然 MFC 没有在其他项目中使用,其中包括调用 func2 的第一个项目的库,所以我无法使用 CString

改成std:string即可解决问题。

我仍然不明白的一件事是为什么我得到这个错误而不是实际指示问题的错误。 func2ArgumentsToInApiString,如您在错误代码中所见,但仍然没有任何迹象表明 Cstring 未知。

关于c++ - 无法管理链接 cpp 文件 - 未解析的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20327911/

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