【问题标题】:How to run a Visual Studio solution without having to add the included files show in the Solution Explorer?如何运行 Visual Studio 解决方案而无需在解决方案资源管理器中添加包含的文件?
【发布时间】:2021-03-15 10:52:36
【问题描述】:

我有一个名为 IncludeFileHelp 的解决方案,它使用 SampleClass.h 和 SampleClass2.cpp。

#include <SampleClass2.h>

void main() {
    SampleClass2 sampleClass2Obj;
    sampleClass2Obj.printHello();
}

SampleClass.h

#pragma
#include <iostream>

class SampleClass2 {
public:
    SampleClass2() {}
    void printHello();
};

SampleClass2.cpp

#include <SampleClass2.h>

void SampleClass2::printHello() {
    std::cout << "Hello from SampleClass2!" << std::endl;
}

我将 SampleClass2.h 和 SampleClass.cpp 的正确目录路径添加到 Additional Include Directories。

当我将 SampleClass2.h 添加到解决方案资源管理器中的头文件并将 SampleClass2.cpp 添加到解决方案资源管理器中的源文件时,程序运行没有任何问题。

但是,如果我从解决方案资源管理器中删除 SampleClass2.h 和 SampleClass2.cpp,我会收到以下错误:

unresolved external symbol "public: void __thiscall SampleClass2::printHello(void)" (?printHello@SampleClass2@@QAEXXZ) referenced in function _main

我知道如何解决此错误的唯一方法是将 SampleClass2.h 和 SampleClass2.cpp 文件拖放回解决方案资源管理器。这在复制或克隆解决方案时会成为一个繁琐的问题,因为即使 Visual Studio 识别该类及其功能,我也必须手动添加所有包含的文件。

我可以做些什么来让我的程序可以在 Visual Studio 2019 中运行,而不必在解决方案资源管理器中包含包含的类头文件和 .cpp 文件?

我唯一能想到的就是将#pragma 更改为:

#ifndef SAMPLECLASS2
#define SAMPLECLASS2

...

#endif /*SAMPLECLASS2*/

但这不起作用。


Images of my Visual Studio Project

【问题讨论】:

  • 标题不是问题;编译工作。您的错误是未定义的引用,因为 SampleClass2.cpp 未包含在您的项目中。它需要。时期。在您尝试通过#include-ing 将 .cpp 文件放入另一个文件来规避这种情况之前......只是......不要。
  • 好的,它可以在解决方案资源管理器中没有头文件的情况下运行。但是,我需要在解决方案资源管理器中有 SampleClass2.cpp 吗?我问是因为其他库(例如 OpenCV)不需要我在解决方案资源管理器中显示 .cpp 文件。我的 SampleClass2.cpp 与 SampleClass2.h 位于同一文件夹中。
  • “我问是因为其他图书馆” - 是的,这就是重点;它们是已构建并链接到您的程序的。您的示例 cpp 没有此功能。当然,您可以制作一个,但这有点超出了本文的范围。
  • 因此,如果我想在解决方案资源管理器中没有类 .cpp 文件的情况下运行我的代码,我需要学习如何为我的类制作 .dll 和 .lib 文件?
  • 一个库,无论是静态的还是动态的,都会被提上日程,是的。它的分发将是一个公共头文件,一个 .lib,在动态库 (dll) 的情况下也是如此。该lib在附加链接依赖中链接到您的程序,如果是动态的,则dll必须在运行时可解析;通常与可执行文件放在同一文件夹中。正如我所说,设置所有这些都超出了这篇文章的范围,应该由你进行调查。可能有很多网络链接可以指导您如何使用 VS 构建您喜欢的任何类型的库。

标签: c++ visual-studio


【解决方案1】:

最常用的方法是创建一个lib 或dll。然后将 lib 或 dll 链接到项目以满足您的需求。您可以参考以下 Microsoft 文档了解更多信息。

  1. Walkthrough: Create and use a static library

  2. Walkthrough: Create and use your own Dynamic Link Library (C++)

【讨论】:

  • @CoolGuy 你有更新吗?如果您的案例已经解决,请帮忙标记答案。如果没有,请随时与我们联系。
猜你喜欢
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多