我试图理解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;
}
如果有人可以告诉我如何解决编译器错误,我将不胜感激。