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

C++ 在同一解决方案但不同配置的另一个项目中使用一个类,c++,visual-studio,visual-c++,linker,C++,Visual Studio,Visual C++,Linker,我在Visual Studio 2008中有两个Visual C++项目,其中一个具有QT4.62开发的用户界面,项目是32位配置,另一个是64位配置的控制台应用程序,它们都在同一个解决方案中。p> 所以我需要在另一个控制台应用程序中使用一些类 假设控制台应用程序有这样一个类: class a { public: void read(); void write(); } 因此,我将此项目的文件夹添加到另一个需要使用a类的项目的其他依赖项中,并尝试像这样使用它: #include

我在Visual Studio 2008中有两个Visual C++项目,其中一个具有QT4.62开发的用户界面,项目是32位配置,另一个是64位配置的控制台应用程序,它们都在同一个解决方案中。p> 所以我需要在另一个控制台应用程序中使用一些类

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

class a
{
public:
   void read();
   void write(); 
}
因此,我将此项目的文件夹添加到另一个需要使用a类的项目的其他依赖项中,并尝试像这样使用它:

#include "a.h"

a myClass;
myClass.write();
当我编译解决方案时,它给出错误LNK2019:未解析的外部符号

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


谢谢。

您需要在项目中包含以下内容之一,以便与之链接:

a、 cpp,或 编译.cpp的库*.lib这也可以与dll结合使用
你几乎没有可能做到这一点。这取决于这两个项目是什么

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

附加源文件。在控制台应用程序中,您有一个名为“源文件”的过滤器,其中附加了*.c和*.cpp文件。用RMB单击此过滤器,选择“添加->现有项”,然后选择.c/.cpp文件,其中包含一个类的定义,可能名为a.cpp->这与附加到QT项目的文件完全相同。 2 QT项目是一个静态[.lib]或动态[.dll]库

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

添加QT项目让我们将其称为QTP作为依赖项。Include a.h的Include标头,并使用与现在相同的方法。另外,打开QTP属性,复制“常规->输出目录”的内容。然后,转到控制台应用程序的属性并选择“链接器->常规”,然后将复制的路径粘贴到“附加库目录”。在“链接器->输入”中,将QTP输出名称添加到“其他依赖项”


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

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

我知道乍一看似乎有些过火,但在一个合理的IDE中只需要10分钟,您可以在项目a中对其进行版本设置、更改,而不会影响项目B,但也可以在项目B中使用更新的版本,最终您会喜欢它。你不需要打扰别人,在没有警告你的情况下改变事情等等

可以浪费十分钟,但也可以在未来有所作为

如今,我真希望几年前在一些小项目中也能做到这一点,而这些小项目本来就不可能成为现在的样子


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

除了包含文件之外,您是否针对库进行链接-?谢谢您的回答。我没有lib文件,只有第一个项目的标题。所以我也需要为链接器添加任何东西吗?我在第一个项目中没有lib或dll。只有头文件和实现文件cpp。链接cpp是什么意思?那么您还需要在第二个项目中包含*.cpp文件。您可以使用共享文件夹,而不是从其他项目中选择文件。头文件还不够吗?添加所有cpp文件似乎有点奇怪。但是谢谢,我一定会试试。不,只有头是不够的,除非你把你的实现移到头中——你可能听说过只使用头的库。是的,实际上我在项目确认中使用的是不使用预编译头选项。是否必须将cpp文件添加到链接器>其他库?对不起,我现在不在电脑前