我有两个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
。
我做错了什么,还是因为项目的配置不同?
感谢。
答案 0 :(得分:0)
您需要在项目中包含以下内容之一才能链接到它:
答案 1 :(得分:0)
你几乎没有可能做到这一点。这取决于这两个项目是什么。
1)它们都是应用程序(编译为* .exe):
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文件