Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 链接自己的静态库时未解析的外部符号_C++_Static_Linker - Fatal编程技术网

C++ 链接自己的静态库时未解析的外部符号

C++ 链接自己的静态库时未解析的外部符号,c++,static,linker,C++,Static,Linker,当我尝试将自己的库链接到项目时,会出现以下错误: .\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

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

.\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)
我完全不知道该怎么办。我一直在网上寻找解决方案,但没有结果

编译 静态库的来源:

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

你能看一看并解释一下是怎么回事吗?提前感谢。

您可能希望将函数声明移出结构,使其不是内联函数

您可能希望将函数声明移出结构,使其不是内联函数

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

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


如果将SetHealth的定义保留在原来的位置,那么实际上不需要另一个.cpp文件,或者实际上不需要静态库。通过在类中定义函数,可以使其内联。对于更复杂的函数,通常从类定义中省略函数的定义,而只将其包含在一个.cpp文件中。

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

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


如果将SetHealth的定义保留在原来的位置,那么实际上不需要另一个.cpp文件,或者实际上不需要静态库。通过在类中定义函数,可以使其内联。对于更复杂的函数,通常会从类定义中省略函数的定义,而只将其包含在一个.cpp文件中。

如果确实希望获得使用库的库和可执行文件,则必须在visual studio中创建两个项目

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


此外,在头文件中声明您的结构,并将其包含在main.cpp中。如果您确实希望获得一个库和一个使用库的可执行文件,则必须在visual studio中创建两个项目

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

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