我正在尝试构建一个dll,以便在c ++中使用我的程序。 dll将是一个带有一堆可继承类和通用实用程序的基本库,然后可以由最终产品(A Game)附带的多个其他应用程序动态使用。我把东西扔在一起,却发现我收到了令人抓狂的错误。这是着名的“错误LNK2019:未解析的外部符号”。首先,我已经找到了解决方案,这里是链接:Unresolved External Symbol- Error in guide?
选择的答案有效。 如果我将我的类放入一个头文件中,它编译得非常好,运行,并且非常漂亮。但是,我想保持声明和实现是分开的,如果我尝试将实现移动到单独的cpp,我会收到LNK2019错误。这是由于某种内联,我只是想知道我是怎么做的在我开始撕掉我的头发之前,我可以用它来修复它。
任何人都可以帮我吗?这是我的班级:
部首:
#ifndef MYDLLTESTCLASS_H
#define MYDLLTESTCLASS_H
class __declspec( dllexport ) MyDLLTestClass {
public:
MyDLLTestClass();
void setX( int x );
int getX();
private:
int x;
};
#endif // MYDLLTESTCLASS_H
CPP:
#include "MyDLLTestClass.h"
MyDLLTestClass::MyDLLTestClass() {
}
void MyDLLTestClass::setX( int x ) {
this->x = x;
}
int MyDLLTestClass::getX() {
return x;
}
如上所述,代码不会编译。但是,如果我将声明和实现放在一起它是有效的,所以如果我这样做:
#ifndef MYDLLTESTCLASS_H
#define MYDLLTESTCLASS_H
class __declspec( dllexport ) MyDLLTestClass {
public:
MyDLLTestClass();
void setX( int x );
int getX();
private:
int x;
};
MyDLLTestClass::MyDLLTestClass() {
}
void MyDLLTestClass::setX( int x ) {
this->x = x;
}
int MyDLLTestClass::getX() {
return x;
}
#endif // MYDLLTESTCLASS_H
它会起作用。同样,我希望声明和实现分开。
当我使用单独的声明和实现时,这是构建报告。
答案 0 :(得分:0)
这实际上比我意识到的要容易得多;事实证明这是一个视觉工作室一直在设置。首先,您需要将dll项目添加到当前项目(将使用它)。然后你需要右键点击你当前的项目并按照这两张图片:
然后添加你的dll,可能只需要进行检查标记(我只是错过了复选标记)。
之后你的项目编译得很好!不需要像每个网页都试图描绘的那样令人讨厌的#ifndef宏(这也不会让你着想)