gpt4 book ai didi

c++ - 如何使用其参数化构造函数初始化成员

转载 作者:太空狗 更新时间:2023-10-29 21:24:39 26 4
gpt4 key购买 nike

没有代码很难描述,所以这里是:我试图在另一个(a)的头文件中原型(prototype)化一个对象(b),然后在(a)的构造函数中调用(b)的构造函数并传递值,这样我就可以使用b的方法这取决于它的构造函数和传递给它的值,但我做的方式给出:定价构造函数的开放括号中的红色下划线说:“monteCarlo 不存在默认构造函数”然后在下一行 m 是带下划线的红色说: “在没有适当的 operator() 或将函数转换为指向函数类型的指针的情况下调用类类型的对象”。非常欢迎任何其他对我的程序提出批评的人,我正在努力学习编程,而且很好。

在文件 pricing.cpp 中我有:

#include "pricing.h"
#include <math.h>
#include <vector>
pricing::pricing(void)
{
m(10,0.0,0.01,50);
}
double pricing::expectedValue(void)
{
expectedExValue = m.samplePaths[2][3]; //yes this isn't an expected value,
// its just for illustration purposes/making it compile.
return 0;
}

在 pricing.h 我有:

#pragma once
#include "pricing.h"
#include "monteCarlo.h"
class pricing
{
public:
pricing(void);
~pricing(void);
double euroCall();
std::vector<double> samplePathing;
double expectedValue();
monteCarlo m;

};

然后 montecarlo.cpp 看起来像:

#include "monteCarlo.h"
#include "randomWalk.h"
#include <vector>
#include <iostream>

monteCarlo::monteCarlo(int trails, double drift, double volidatity, int density)
{
for (int i = 0; i < trails; i++)
{
std::cout << "Trail number " << i+1 << std::endl;
randomWalk r(drift,volidatity,density);
r.seed();
samplePaths.emplace_back(r.samplePath);
std::cout << std::endl << std::endl;
}
}


monteCarlo::~monteCarlo(void)
{
}

最后 montecarlo.h 是:

#pragma once
#include <vector>

class monteCarlo
{
public:
monteCarlo(int, double, double, int);
~monteCarlo(void);
std::vector< std::vector<double> > samplePaths;
};

最佳答案

pricing::pricing(void)
{
m(10,0.0,0.01,50);
}

这会尝试调用 m 就好像它是一个函数(如果它重载了operator(),你就可以这样做这就是错误所指的内容)。要改为初始化 m,请使用成员初始化列表:

pricing::pricing(void)
: m(10,0.0,0.01,50)
{ }

此冒号语法用于在构造函数中初始化对象的成员。您只需按名称列出成员,然后使用 ( expression-list ){ initializer-list } 语法对其进行初始化。

关于c++ - 如何使用其参数化构造函数初始化成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15587304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com