在同一解决方案但不同配置的另一个项目中使用一个类

时间:2014-02-20 20:05:13

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

我有两个Visual C ++项目(在Visual Studio 2008中),其中一个用户界面用qt 4.6.2开发(项目是32位配置),另一个是控制台应用程序( 64位配置)两者都在同一解决方案中。

所以我需要在另一个中使用某些类的控制台应用程序。

假设控制台应用程序有一个这样的类:

class a
{
public:
   void read();
   void write(); 
}

所以我将这个项目的文件夹添加到需要使用类a的其他项目的其他依赖项中,并尝试使用它:

#include "a.h"

a myClass;
myClass.write();

当我编译解决方案时,它会给出Error LNK2019: Unresolved External Symbol

我做错了什么,还是因为项目的配置不同?

感谢。

3 个答案:

答案 0 :(得分:0)

您需要在项目中包含以下内容之一才能链接到它:

  1. a.cpp或
  2. 编译a.cpp的库(* .lib)(也可以与dll结合使用)

答案 1 :(得分:0)

你几乎没有可能做到这一点。这取决于这两个项目是什么。

1)它们都是应用程序(编译为* .exe):

  • 附加源文件。在控制台应用程序中,您有一个名为“源文件”的过滤器,其中附加了* .c和* .cpp文件。点击此过滤器,使用RMB并选择“添加 - >”;现有项'和选择.c / .cpp文件,其中包含a类的定义(可能名为a.cpp) - >这与QT项目附带的文件完全相同。

2)QT项目是一个库(静态[.lib]或动态[.dll])。

  • 使用上面列出的解决方案。对于动态库,如果您导出类a或其中某些成员(并且这些成员标记有一些declspec宏的变体),请确保将此宏解析为空表达式。

  • 添加QT项目(我们称之为QTP)作为依赖项。包含a#include "a.h")的标头,并使用a,就像现在这样做。此外,打开QTP属性,并复制'常规 - >的内容输出目录'。然后,转到控制台应用的属性,然后选择“链接器 - >常规',然后将复制的路径粘贴到'其他库目录'。在'链接器 - >输入'将QTP输出名称添加到'其他依赖项'。

答案 2 :(得分:0)

正如@PeterR所说,你也可以在第二个项目中包含* .cpp文件。事实上,第二个项目需要类的行为,而不仅仅是它的标题,你可以以源代码的形式或以编译库的形式将它提供给编译器。

但我个人会在静态库中编译代码。

我知道乍一看似乎有点矫枉过正,但在合理的IDE中只需要10分钟就可以对其进行版本化,在项目A中更改它而不会影响项目B,但也可以在项目B中使用更新的版本最终你会感觉像。你不需要打扰别人改变事情而不用警告你等等。

可能会浪费十分钟,但未来也会有所不同。

如今,我希望自己多年前在这些小项目中做过这样的事情,而这些项目并没有预见到会成为他们的成就!

在将其编译为lib之后,您将像往常一样使用lib来包含.h文件并链接.a文件