无法访问对象的私有函数
问题描述:
我有一个任务,我无法编辑两个头文件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
答
如果您不允许修改car.h,您将无法从拨打。
如果您不允许修改main
,那么您的任务不正确。
如果您要创建自己的main
,请在不拨打a.load_car()
的情况下找到一种方法来完成您的任务。
答
As The Dark提到,load_car()函数是通过构造函数调用的,因此不应该在main()函数中调用。
请注意,您发布的是基于任务的问题,而且提供的问题描述相当薄弱,而且提供了非缩进代码,而且不提供自包含的可运行示例。除非你修改你的问题,否则这不会顺利。我最好的建议是将你的问题分解为自我测试,以准确捕获你不理解或迷惑的部分。根据你的描述,你自己似乎并不知道你在问什么。 – Dmitry
在调用load_car()的car类的实现(即car.cpp中)中是否有任何地方?通常,当某人使某个方法像这样私人化时,他们会这样做,因为他们特别*不希望在该同一类之外的任何人调用该方法。所以这表明car.h的作者不希望你调用load_car()(除了可能来自car :: something()方法的实现,如果你被允许编辑car.cpp) –
也许你可以使用文档中的'friend class':http://www.cplusplus.com/doc/tutorial/inheritance/,但@Dmitry指出,首先尝试。 – TuanDT