链接派生类时的编译器错误

时间:2015-01-03 19:26:46

标签: c++ inheritance

我试图理解C ++中的继承。我创建了一个名为Area的基类,以及一个名为RuralArea的派生类。这两个类都有一个.h头文件和一个.cpp文件,它定义了头文件中声明的方法。我试图将 ruralarea.cpp 文件与名为 ruraltest.cpp 的主文件链接起来。在终端,我打字:

g ++ -c ruralarea.cpp

g ++ -c ruraltest.cpp

g ++ -o ruraltest ruralarea.o ruraltest.o

我收到了以下错误:

Undefined symbols for architecture x86_64:
  "Area::set_pop()", referenced from:
      RuralArea::set_pop() in ruralarea.o
  "Area::set_size()", referenced from:
      _main in ruraltest.o
  "Area::Area()", referenced from:
      RuralArea::RuralArea() in ruralarea.o
  "Area::get_pop() const", referenced from:
      _main in ruraltest.o
  "Area::get_name() const", referenced from:
      _main in ruraltest.o
  "Area::get_size() const", referenced from:
      _main in ruraltest.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是我的基类的标题, area.h

#ifndef AREA_H
#define AREA_H

#include <string>

using namespace std;

class Area
{
public:

    Area();

    void set_name();

    void set_size();

    void set_pop();

    string get_name() const;

    int get_size() const;

    int get_pop() const;

private:
    string name;
    int size;
    int pop;
};

#endif

这是文件 area.cpp

#include <iostream>
#include "area.h"

using namespace std;

Area::Area()
{
    name = "NA";
    size = 0;
    pop = 0;
}

void Area::set_name()
{
    cout << "Please enter the name of the area:" << endl;
    getline(cin, name);
}

void Area::set_size()
{
    cout << "Please enter the size of the area in square miles:" << endl;
    cin >> size;
    string remainder;
    getline(cin, remainder);
}

void Area::set_pop()
{
    cout << "Please enter the population of the area:" << endl;
    cin >> pop;
}

string Area::get_name() const
{
    return name;
}

int Area::get_size() const
{
    return size;
}

int Area::get_pop() const
{
    return pop;
}

以下是我的派生类的标题, ruralarea.h

#include <string>

using namespace std;

#include "area.h"

class RuralArea : public Area
{
public:
    RuralArea();
    void set_pop();
    int get_cows() const;
    int get_chickens() const;
private:
    int cows;
    int chickens;
};

以下是 ruralarea.cpp 文件的代码。

#include <iostream>
#include "ruralarea.h"

RuralArea::RuralArea():Area()
{
    cows = 0;
    chickens = 0;
}

void RuralArea::set_pop()
{
    Area::set_pop();
    cout << "Enter number of cows:" << endl;
    cin >> cows;
    cout << "Enter number of chickens:" << endl;
    cin >> chickens;
}

int RuralArea::get_cows() const
{
    return cows;
}

int RuralArea::get_chickens() const
{
    return chickens;
}

最后,这是我的主程序 ruraltest.cpp 的文件。

#include <iostream>
#include <iomanip>

using namespace std;

#include "ruralarea.h"

int main()
{
    RuralArea county;
    county.set_size();
    county.set_pop();
    cout << "Your rural area's info:" << endl;
    cout << "Name: " << county.get_name() << endl;
    cout << "Square miles: " << county.get_size() << endl;
    cout << "Population: " << county.get_pop() << endl;
    cout << "Cows: " << county.get_cows() << endl;
    cout << "Chickens: " << county.get_chickens() << endl;
}

如果有人可以告诉我如何解决编译器错误,我将不胜感激。

0 个答案:

没有答案