У меня есть задание, в котором я не могу редактировать два файла заголовка, 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
Есть ли место в реализации класса автомобиля (т.е. внутри car.cpp), где вызывается load_car()? Обычно, когда кто-то делает такой метод приватным, они делают это, потому что они специально * не хотят, чтобы кто-либо из того же класса вызывал этот метод. Таким образом, это говорит о том, что автор car.h не хочет, чтобы вы вызывали load_car() (за исключением, возможно, от реализации метода car :: something(), если вам разрешено редактировать car.cpp) –
Возможно, вы могли бы используйте класс 'friend 'из документации: http://www.cplusplus.com/doc/tutorial/inheritance/, но, как заметил @Dmitry, сначала попытайтесь. – TuanDT