2つのヘッダファイルcar.hとcompass.hを編集できないという課題があります。ファイルcar.hには、 void load_car();
というプライベート関数があります。これは後としてcar.cppで定義されていますオブジェクトのプライベート関数にアクセスする際の問題
void car::load_car(){
cout << "Please enter make and model:" << endl;
ifstream inFile;
string fileName;
fileName = (make + "-" + model + ".txt");
inFile.open(fileName.c_str());
//not a finished function
}
私の問題は、私は主な機能を持っているということです、私は、オブジェクトのプライベートメンバ関数を呼び出すことはできません
int main() {
cin >> make >> model;
car a(make, model);
a.load_car();
return 0;
}
。どのように私はcar.hヘッダーを変更せずにこれを正しく行うことができます。どんな助けでも大歓迎です。
In file included from car.cpp:2:0:
car.h: In function ‘int main()’:
car.h:22:7: error: ‘void car::load_car()’ is private
void load_car();
^
car.cpp:14:13: error: within this context
a.load_car();
^
完全なコードは、以下に含まれている:グラムでコンパイルするとき
にエラーがある++受信 car.cpp
#include "compass.h"
#include "car.h"
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
string make, model;
int main() {
cin >> make >> model;
car a(make,model);
a.load_car();
return 0;
}
void car::load_car(){
cout << "Please enter make and model:" << endl;
ifstream inFile;
string fileName;
fileName = (make + "-" + model + ".txt");
inFile.open(fileName.c_str());
}
car.h
#ifndef CAR_H
#define CAR_H
#include <string>
#include "compass.h"
//Relative direction
enum class rDir {left, right};
class car
{
private:
std::string make, model;
int topSpeed, horsepower, mass;
double currentSpeed = 0;
//Defined by compass.h: an x/y coordinate struct and cardinal direction.
coordinates position;
compass direction;
//Helper functions
void load_car();
void update_position();
public:
//Constructor/Destructor
car (std::string ma, std::string mo) : make (ma), model (mo) {load_car();}
~car() {};
//Getters
std::string get_make() {return make;}
std::string get_model() {return model;}
coordinates get_position() {return position;}
compass get_direction() {return direction;}
double get_speed() {return currentSpeed;}
//Things cars do
void accelerate();
void brake();
void coast();
void steer (rDir turn);
};
#endif // CAR_H
自己紹介型の実行可能な例を提供せずに、インデントされていないコードを使用してスキミングするのがかなり難しい問題について、かなり弱い説明を付けて課題ベースの質問を投稿していることに注意してください。あなたの質問を修正しない限り、これはうまくいかないでしょう。私の最善のアドバイスは、あなたが理解していないか混乱している部分を正確にキャプチャしている自己完結型のテストにあなたの問題を分解することです。あなたの説明に基づいて、あなたはあなたが何を求めているか知っているようには思われません。 – Dmitry
load_car()が呼び出されているcarクラスの実装(car.cpp内)の場所はありますか?通常、ある人がそのようなメソッドを非公開にすると、同じクラスの外部にいる誰もそのメソッドを呼びたくないからです。これは、car.hの作成者がload.cal()を呼びたくないことを示唆しています(おそらく、car :: something()メソッドの実装から、car.cppを編集することが許可されている場合は除きます) –
http://www.cplusplus.com/doc/tutorial/inheritance/で、「友人クラス」を使用してください。しかし、@Dmitryが指摘したように、最初に試してみてください。 – TuanDT