【问题标题】:MSVC linker error LNK2019 when reusing a base class in C++ solution在 C++ 解决方案中重用基类时 MSVC 链接器错误 LNK2019
【发布时间】:2012-07-14 23:24:12
【问题描述】:

这真的让我大吃一惊,Visual Studio 2008 太无脑了,根本无法解决以下错误。

我的 C++ 解决方案中有几个项目。一个项目在 crashreporter.h 和 crashreporter.cpp 文件中有 C++ 基类 CCrashReporter。

我需要从中派生另一个类,该类位于同一解决方案中的另一个项目中。所以我这样做:

//From CrashReporter2.h
#pragma once
#include "..\BaseModules\CrashReporter.h"

class CCrashReporter2 :
    public CCrashReporter
{
public:
    CCrashReporter2(void);
    virtual ~CCrashReporter2(void);
};

然后:

//From crashreporter2.cpp
#include "StdAfx.h"
#include "CrashReporter2.h"


CCrashReporter2::CCrashReporter2(void):
CCrashReporter(ENTERY_PARAM_FOR_REPORTER2)
{
}

CCrashReporter2::~CCrashReporter2(void)
{
}

上面的代码编译正常,但是当链接器运行时,我得到了这些:

1>CrashReporter2.obj : error LNK2019: unresolved external symbol "public: __thiscall CCrashReporter::CCrashReporter(int) blah-blah
1>CrashReporter2.obj : error LNK2019: unresolved external symbol "public: __thiscall CCrashReporter::~CCrashReporter(void) blah-blah
1>C:\Users\Dev\C++\ProjName123\Debug\Mod123.exe : fatal error LNK1120: 2 unresolved externals

【问题讨论】:

  • 好像BaseModules/CrashReporter.cpp 不是您项目的一部分,或者您没有链接包含它的库。
  • @BoPersson:你明白了!谢谢。这很容易。我希望错误消息是这样说的。您想将其发布为答案吗?我需要做的就是选择第二个项目,然后转到 Project -> Add Existing Item 并从基类中选择 .cpp 和 .h 文件。多哈:)

标签: c++ visual-studio linker-errors lnk2019


【解决方案1】:

请参阅 Bo Persson 的评论。每个项目都需要以一种或另一种方式链接到正确的文件。将源文件直接添加到项目中,或者创建一个链接到应用程序的静态/动态库项目。

【讨论】:

  • 谢谢。虽然我不确定为什么我需要制作一个静态/动态库项目。我将所有项目一起编译成单独的 exe,在这里我只是重用 CCrashReporter 类。实际上,我已经使用“共享”结构并在 SharedTypes.h 文件中进行了定义,该文件像该类一样声明和使用。为什么不会导致任何链接器错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 2017-04-07
  • 2015-02-26
相关资源
最近更新 更多