传递给类构造函数的 C++ 字符串 - 链接器错误
Posted
技术标签:
【中文标题】传递给类构造函数的 C++ 字符串 - 链接器错误【英文标题】:C++ String passed to class constructor - linker errors 【发布时间】:2015-09-28 11:53:26 【问题描述】:我是一名 C# 程序员,在 VS 2008 中从事 C++ 项目,试图创建一个对象的实例并将其作为构造函数的参数传递给它。当我这样做时,我遇到了我很难诊断的链接器错误。
我得到的链接器错误是
2>TestMyProj.obj : error LNK2028: unresolved token (0A0002B9) "public: __thiscall myNamespace::myClass::myClass(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0myClass@myNamespace@@$$FQAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
2>TestMyProj.obj : error LNK2019: unresolved external symbol "public: __thiscall myNamespace::myClass::myClass(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0myClass@myNamespace@@$$FQAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
2>..\MyProj\TestMyProj.dll : fatal error LNK1120: 2 unresolved externals
来自试图创建类实例的项目 (TestMyProj)。 MyProj 编译良好。代码如下:
MyProj.cpp
#include "MyProj.h"
namespace myNamespace
myClass::myClass(string inString)
;
MyProj.h:
#pragma once
#include <string>
using namespace std;
namespace myNamespace
class myClass
public:
myClass::myClass(string inString);
;
我尝试创建 MyClass 类实例的代码位于同一解决方案中的另一个项目中
TestMyProj.cpp:
#include <string>
#include "../MyProj/MyProj.h"
int main()
myNamespace::myClass("");
return 0;
我显然误解了一些基本的东西,可能是关于头文件的性质。我主要致力于以前编码的示例。
谁能指出我做错了什么?
【问题讨论】:
***.com/questions/12573816/… 此外,由于您在项目中使用该类,而不是定义它的项目,您可能需要将其导出***.com/questions/6840576/… 1.在 MyProj.cpp 中,您的命名空间末尾有一个分号,2。在 MyProj.h 中的类 myClass 大括号内有限定符“myClass::”。 感谢您告诉我。不过好像没什么影响…… 另外@CoryKramer,很有可能是导出 DLL 问题。感谢您引起我的注意。现在调查一下。 【参考方案1】:您需要将项目链接在一起。在 C# 中,当您引用一个类时,它会自动链接程序集。对于 C++,您必须通过包含 .h 文件来引用该类,并链接项目。
解决方案只是将项目收集在一起的方法,对编译器没有任何意义。
老实说,我是静态链接库的粉丝,但如果你真的想创建一个 dll,请参阅 https://msdn.microsoft.com/en-gb/library/ms235636.aspx 和名为“在应用程序中使用类库中的功能”的部分。
【讨论】:
【参考方案2】:大部分 myproj.lib 没有添加到库文件列表中。在链接器配置中。
【讨论】:
做到了!谢谢!右键单击 TestMyProj 属性。配置属性 > 链接器 > 输入 > 附加依赖项。添加 ..\MyProj\debug\MyProj。现在构建良好!以上是关于传递给类构造函数的 C++ 字符串 - 链接器错误的主要内容,如果未能解决你的问题,请参考以下文章