访问基类C ++

时间:2017-04-27 01:21:24

标签: c++ inheritance segmentation-fault getter

嗨,这是我的基类Ranger的头文件,在其中我有保护变量fov_,usb_ ...我希望用我的getter函数访问,我有三个子类。

Ranger.h

#ifndef RANGER_H
#define RANGER_H

using namespace std;

class Ranger
{
    //private contructor prevents contruction of base class
    Ranger();
public:
    void setBaud(int baud);
    virtual void setFOV(int fov) = 0;
    void setSamp(int sam);
    int getFOV();
    int getBaud();
    int getMaxRange();
    int getUSB();
protected:
    //protected variables that are each indivdualy owned by each sensor
    int fov_;
    int maxRange_;
    int usb_;
    int baud_;
    int samp_;
    double data[];
    //protected contructors for the child classes to use to set fixed parameters
    Ranger(int fov, int maxRange, int port);
    Ranger(int maxRange, int port);
};

#endif // RANGER_H

这是我的包含getter文件的基类的cpp文件,它只返回了被保护的变量。

Ranger::Ranger()
{

}

Ranger::Ranger(int fov, int maxRange, int port)
{
    fov_ = fov;
    maxRange_ = maxRange;
    usb_ = port;
}

Ranger::Ranger(int maxRange, int port)
{
    maxRange_ = maxRange;
    usb_ = port;
}

void Ranger::setBaud(int baud)
{
    switch(baud)
    {
    case 0: baud_ = 38400; break;
    case 1: baud_ = 115200; break;
    default: baud_ = 38400; break;
    }
}

void Ranger::setSamp(int sam)
{
    samp_ = sam;
}

int Ranger::getFOV()
{
    return fov_;
}

int Ranger::getBaud()
{
    return baud_;
}

int Ranger::getMaxRange()
{
    return maxRange_;
}

int Ranger::getUSB()
{
    return usb_;
}

在我的主要内容中,我想从基类访问受保护的变量以防止重写代码,因此每个子变量都在基类中受到保护。我尝试通过las.getFOV()访问这些,但我得到一个分段错误错误意味着我无法访问它们,我不太明白为什么。

的main.cpp

int main( int argc, char ** argv)
{
    Laser las;
    int baud;
    cout << "Baud:" << endl;
    cout << "0 - 38400" << endl;
    cout << "1 - 115200" << endl;
    cin >> baud;
    las.setBaud(baud);
    cout << "Baud for Lazer sensor is "+las.getBaud() << endl;
    cout << "Lazer sensor created..." << endl;
    cout << "Lazer's FOV: " + las.getFOV() << endl;
    cout << "Lazer's Max Range: " + las.getMaxRange() << endl;
    cout << "Lazer's Port: " + las.getUSB() << endl;
    Radar rad;
    int baud2;
    cout << "Baud:" << endl;
    cout << "0 - 38400" << endl;
    cout << "1 - 115200" << endl;
    cin >> baud2;
    rad.setBaud(baud2);
    cout << "Baud for Radar sensor is "+rad.getFOV() << endl;
    int fov;
    cout << "Feild of View Of Radar:" << endl;
    cout << "0 - 20 degrees" << endl;
    cout << "1 - 40 degrees" << endl;
    cin >> fov;
    rad.setFOV(fov);
    cout << "FOV is set to " + rad.getFOV() << endl;
    cout << "Radar sensor created..." << endl;
    cout << "Radar's FOV: ' " + rad.getFOV() << endl;
    cout << "Radar's Max Range: " + rad.getMaxRange() << endl;
    cout << "Radar's Port: " + rad.getUSB() << endl;
    Sonar son;
    //rad.setFOV(user);

}

这里是一个子类的cpp文件供参考(Lazer) laser.cpp

#include "laser.h"

Laser::Laser() : Ranger(180,8,0)
{
};

void Laser::setFOV(int fov)
{
    fov_ = fov;
}

laser.h

#ifndef LASER_H
#define LASER_H
#include "ranger.h"
#include "rng.h"

class Laser : public Ranger
{
public:
    Laser();
    void setFOV(int fov);
};

#endif // LASER_H

1 个答案:

答案 0 :(得分:0)

感谢所有发表评论的人,我知道我提供了太多代码来帮助你们,对不起我下次会知道,并且谢谢你让我知道错误之间的区别,我和#39我做了更多研究,发现问题是当我打印出来时你不能使用以下操作符:

cout<<""+function()<<endl;

相反,您需要将函数与数组分开,如下所示:

cout<<""<<function()<<endl;

谢谢你们。