当我尝试在家用PC上进行编译时出现未定义的参考错误

收藏

好的,所以我试图更加熟悉C ++中的OOP,并且得到了以下代码:

//main.cpp
#include <iostream>
#include "ZooAnimal.h"

using namespace std;

int main()
{
    ZooAnimal bozo;
    bozo.set_name(12);
    // bozo.Create("Bozo", 408, 1027, 400);

    // cout << "This animal's name is " << bozo.reptName() << endl;

    // bozo.Destroy();
    cout << "Hello";
}
//ZooAnimal.h
#ifndef ZOOANIMAL_H
#define ZOOANIMAL_H

class ZooAnimal
{
private:
    std::string name;
    int cageNumber;
    int weightDate;
    int weight;

public:
    void Create(std::string, int, int, int);
    void Destroy();
    std::string reptName();
    int daysSinceLastWeighted(int today);
    void set_name(int);
};

#endif //ZooAnimal

最后,

//ZooAnimal.cpp
#include "ZooAnimal.h"
#include <iostream>

void ZooAnimal::Create(std::string a, int b, int c, int d)
{
    //This creates a ZooAnimal Object
    name = a;
    cageNumber = b;
    weightDate = c;
    weight = d;
}

int ZooAnimal::daysSinceLastWeighted(int today)
{
    //calculate how many days have passed since last weight
    return today - weightDate;
}

//clear up the memory
void ZooAnimal::Destroy()
{
    delete &name;
}

// return the animal name
std::string ZooAnimal::reptName()
{
    return name;
}

void ZooAnimal::set_name(int a)
{
    cageNumber = a;
}

因此,当我尝试运行此代码(当然是从main.cpp运行)时,它将无法编译,并且在控制台中收到以下消息

C:\Users\<user>\AppData\Local\Temp\ccOiWb7r.o:main.cpp:(.text+0x2e): undefined reference to `ZooAnimal::set_name(int)'
collect2.exe: error: ld returned 1 exit status

我在Windows 10机器上使用MinGW进行编译。奇怪的是,当我尝试在repl.it之类的云编辑器上运行相同的代码时,它工作得很好,并且如果我不将代码分成多个文件,那么它也可以正常运行。 我该怎么办?

回复