我在完成一项相对简单的任务时遇到了很多麻烦。我有两个头文件,input.h
和 grains.h
,它们都在其中定义了类。我在下面包含了该项目的所有头文件和源文件。
我的问题是,当执行 input->from_file(fname)
时,打印到屏幕上的值是正确的,假设它是 4
。然后当它在 grains->get_pars()
上移动时,打印到屏幕上的值是垃圾,通常是 ~605937280
。我知道这种类型的垃圾值表示未设置变量,但我不明白它是如何未设置的。
我的目标是让 input.cpp
读取一些文件中的一些参数,这些参数对 grains.cpp
很重要,并将它们一起传递。我认为派生类可以解决问题,但有些地方不对劲。任何关于我做错了什么的提示都将不胜感激。此外,除了我提出的建议之外,任何实现这一目标的建议都非常受欢迎,谢谢。请注意,所示代码编译得很好。
//input.h
#ifndef Input_H
#define Input_H
#include <iostream>
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <cstring>
class Input {
protected:
int in_grains;
public:
void from_file(std::string);
};
#endif
//grains.h
#ifndef Grains_H
#define Grains_H
#include "input.h"
class Grains : protected Input {
protected:
int grains;
public:
void get_pars(void);
};
#endif
//input.cpp
#include "input.h"
void Input::from_file(std::string infile)
{
std::ifstream input(infile.c_str());
std::istringstream iss;
std::string line, keyword;
char arg1[50], arg2[50], arg3[50];
while(std::getline(input,line)) {
iss.clear();
iss.str(line);
iss >> keyword >> arg1 >> arg2 >> arg3;
if ((keyword == "GRAINS") || (keyword == "Grains") || (keyword == "grains")) {
this->in_grains = atoi(arg1);
}
}
fprintf(stdout,"%i\n",in_grains );
}
//grains.cpp
#include "grains.h"
void Grains::get_pars(void)
{
this->grains = in_grains;
fprintf(stdout,"%i\n",grains );
}
//main.cpp
#include "input.h"
#include "grains.h"
int main(int nargs, char *argv[])
{
Input obj1;
Input *input = &obj1;
Grains obj2;
Grains *grains = &obj2;
std::string fname = argv[1];
input->from_file(fname.c_str());
grains->get_pars();
return 0;
}
最佳答案
我猜当你执行时:
input->from_file(fname.c_str());
grains->get_pars();
您期待的是 in_grains
来自 input
可用为 grains->grains
. input
和 grains
是两个不同的对象。 in_grains
尚未在对象上设置 grains
指向。
也许你打算使用:
int main(int nargs, char *argv[])
{
Grains obj;
Input *input = &obj;
Grains *grains = &obj;
std::string fname = argv[1];
input->from_file(fname.c_str());
grains->get_pars();
return 0;
}
但是,要使用它,您必须制作 Input
一个public
Grain
的基类, 不是 protected
基类。
class Grains : public Input {
关于c++ - 无法从单独的类 C++ 访问类的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27849148/