传递给类构造函数的 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++ 字符串 - 链接器错误的主要内容,如果未能解决你的问题,请参考以下文章

传递给类时 c_str() 和字符串的奇怪行为

传递给构造函数的临时对象的 C++ 寿命

构造一个指向 alloca 的函数指针会导致链接器错误?

链接器错误 - 不确定它没有链接

将构造函数值从子类传递到超类c++ [重复]

使用成员函数求解方程 C++