1

当我尝试将我自己的库链接到我的项目时,会出现这些错误:

.\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;
}

你能看一下并解释什么是错的吗?提前致谢。

4

3 回答 3

2

您可能希望将函数声明移出struct,使其不是“内联”函数。

于 2013-05-05T16:53:15.957 回答
2

您在两个 cpp 文件中都定义了仓鼠,但有所不同;这是不允许的。(“一个定义规则”是这样说的。)

您需要做的是将 struct Hamster 的定义移动到头文件中,并将该头文件包含在 main.cpp 和其他 .cpp 文件中

(如果您将 SetHealth 的定义保留在原处,则实际上不需要其他 .cpp 文件 - 或者实际上不需要静态库。通过在类中定义函数,您可以使其内联。对于更复杂的函数,通常从类定义中省略函数的定义,而是将其包含在一个 .cpp 文件中。)

于 2013-05-05T16:57:37.997 回答
1

如果你真的想获得一个库和一个使用你的库的可执行文件,你必须在 Visual Studio 中创建两个项目。

第一个构建静态库,第二个构建可执行文件。构建可执行文件的项目必须依赖于库。

此外,在头文件中声明您的结构并将其包含在您的 main.cpp

于 2013-05-05T16:58:12.960 回答