当我尝试将自己的库链接到我的项目时,会出现以下错误:
.\main.cpp(10) : warning C4091: 'extern ' : ignored on left of 'Hamster' when no variable is declared
main.obj : error LNK2001: unresolved external symbol "public: void __thiscall Hamster::SetHealth(int)" (?SetHealth@Hamster@@QAEXH@Z)
我完全不知道该怎么做。我一直在网上搜索解决方案,但没有结果。
(使用Visual Studio C ++编译,MS Windows XP)
静态库的来源:
struct Hamster
{
public:
int Health;
void SetHealth(int newHealth)
{
if(newHealth <= 100 && newHealth > 0)
this->Health = newHealth;
}
};
控制台程序的来源
#include <iostream>
using namespace std;
#pragma comment(lib, "../Release/mylib.lib")
extern struct Hamster
{
public:
int Health;
void SetHealth(int newHealth);
};
void main()
{
Hamster White;
White.SetHealth(100);
cout << White.Health << endl;
}
你能看看并解释一下是什么问题吗?提前谢谢。
答案 0 :(得分:2)
您可能希望将函数声明移出struct
,这样它就不是“内联”函数。
答案 1 :(得分:2)
你在两个cpp文件中定义了Hamster,但不同;这是不允许的。 (“一个定义规则”是这样说的。)
您需要做的是将struct Hamster的定义移动到头文件中,并将该头文件包含在main.cpp和其他.cpp文件中
(如果你把SetHealth的定义留在原处,你实际上并不需要另一个.cpp文件 - 或者实际上是静态库。通过定义类中的函数,你可以使它成为内联函数。对于更复杂的函数它从类定义中省略函数的定义是正常的,而是将其包含在一个.cpp文件中。)
答案 2 :(得分:1)
如果你真的想要一个库和一个使用你的库的可执行文件,你必须在visual studio中制作两个项目。
第一个构建静态库,第二个构建可执行文件。 构建可执行文件的项目必须依赖于库。
此外,在头文件中声明您的结构,并将其包含在您的main.cpp
中