2017-04-27 10 views
0

これは私の基本クラスレンジャーのヘッダーファイルで、その中に私はgetter関数でアクセスしたい変数fov_、usb_を保護しています。私は3つの子クラスを持っていますこれです。基本クラスC++の変数へのアクセス

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

これはそれだけでportected変数のリターンを持っている、ゲッターファイルが含まれ、基本クラスのための私の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ファイルの一つである(レイザー) laser.cpp

#include "laser.h" 
 

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

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

0123コメント

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

getterに問題はありません。あなたの質問に表示されているコードは[mcve]の要件を満たしていません。そのような正式な答えは不可能ですが、クラッシュする可能性が高い理由は、 'double data []'クラスメンバーが何であるかについてのあなたの根本的な誤解です。ポインタと配列の詳細については、C++の本を参照してください。 –

+1

'las.getFOV()でアクセスしようとしましたが、セマンティッションフォールトエラーが発生しました。私はアクセスできませんでした。アクセス権がない場合は、コンパイル時にエラーが発生する可能性があります。 – John3136

答えて

0

おかげで誰もが、私はあなたたちを助けるためにあまりにも多くのコードを入れて理解し、私は次の時間のために知っているだろうということについて申し訳ありません、そしてありがとう私はエラーの違いを知らせるために、私はより多くの研究が行われ、問題は、私はあなたのような演算子を使用することはできません、それをプリントアウトした時には検出されませんでした:その代わり

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

あなたがseparaに必要TEそのような配列から機能:

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

みんなありがとう。

関連する問題