传递给类构造函数的 C++ 字符串 - 链接器错误

标签 c++ string class constructor linker

我是一名 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 编译正常。代码如下:

我的项目.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;
}

我显然误解了一些基本的东西,可能是关于头文件的性质。我主要处理以前编码的示例。

谁能指出我做错了什么?

最佳答案

您需要将项目链接在一起。在 C# 中,当您引用一个类时,它会自动链接程序集。使用 C++,您必须通过包含 .h 文件、链接项目来引用该类。

解决方案只是将项目收集在一起的方式,对编译器没有任何意义。

老实说,我是静态链接库的粉丝,但如果你真的想创建一个 dll,请参阅 https://msdn.microsoft.com/en-gb/library/ms235636.aspx以及名为“在应用程序中使用类库中的功能”的部分。

关于传递给类构造函数的 C++ 字符串 - 链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32822350/

相关文章:

python - 在具有 asyncio.coroutine 方法的类外部声明的 asyncio event_loop 失败并显示 "AttributeError: ' NoneType' 对象没有属性 'select'“

c++ - macOS 上的 C++ 标准库在哪里?

c++ - QMatrix4x4 模型 View 投影 OpenGL 无法获取要渲染的场景

c++ - C++ sprintf删除未定义的行为

C++17 模板推导指南不用于空参数集?

iOS 俄语可本地化字符串不起作用(但其他人可以)

java - hashCode() 和 equals() 与 Class<T>

c++ - C++ 中的类到类数据类型转换

string - CodeJam 2014 : How to solve task "New Lottery Game"?

python - 计算 Pandas 中单词出现次数的最快方法