在类之间传递重载的构造函数

时间:2018-08-21 09:30:48

标签: c++ function class c++11 constructor

我必须将重载的构造函数表单类Parameters放入类Solver中的函数中。 这是参数标题:

#ifndef Parameters
#define Parameters

#include <iostream>
#include<conio.h>
#include<fstream>
#include<string>
using namespace std;

class Parameters
{
    int M;
    double dx;
    double eps;
public:
    Parameters( );
    Parameters(int M1, double dx1, double    eps1 );
    Parameters( string  fileName);
};
#endif

构造函数使用默认值或由用户从键盘或文件中选择的默认值初始化Mdxeps

我想要另一个将包含此初始化值的类(为了最近解决这个方程,也在该类中)。

问题是,尽管我尝试通过值,引用或/指针执行此操作,但始终会编译一些错误或代码,但什么也没做。

这是我的规划求解课程:

#include "ParametersH.h"
#include "EquationH.h"
#include <iostream>
#include<conio.h>
#include<fstream>
#include<string>
#include<vector>

using namespace std;
class Solver
{
public:
    int Solve( Parameters& obj );
};

int Solver::Solve( Parameters& obj)
{
    cout << obj.M; // M is private so it fails :<
    // another attempt was like this:
    Parameters *pointer = new Parameters();
}

int main()
{
    Solver Solve();
    return( 0 );
}

我真的无法应付,希望有人能帮忙。

1 个答案:

答案 0 :(得分:1)

如评论中提到的@lubgr,在这里

Solver Solve();

您声明一个名为Solve()的函数,而没有给您一个Solver对象的参数,而不是成员函数Solve( Parameters& obj );

如果您的目标是访问Parameters类中的Solver类的私有成员:您可以

  • 定义Solver的朋友,ParametersSee here
  • 通过setters and getters
  • 访问
  • 构建Parameters的结构,您可以通过该结构访问内部的所有内容 它

但是,看起来您只需要一个结构Parameters和一个简单的函数Solve( Parameters& obj);就可以了。

struct Parameters
{
    int m_;
    double dx_, eps_;
    Parameters(int M1, double dx1, double   eps)
        : m_(M1), dx_(dx1), eps_(eps) // provide other contrs as per
        {}
};

int Solve(Parameters& obj)
{
    std::cout << obj.m_ << " " << obj.dx_ << " " << obj.eps_ << std::endl;
    return obj.m_;
}

现在只需main()

std::cout << "result: " << Solve(Parameters(1, 2.0, 3.0));