Я не совсем уверен, решит ли это проблему, но, по крайней мере, я хочу попытаться помочь:
Прежде всего, давайте посмотрим конструктор SquareRootProcess:
SquareRootProcess( Real b,
Real a,
Volatility sigma,
Real x0 = 0.0,
const boost::shared_ptr<discretization>& d = boost::shared_ptr<discretization>(new EulerDiscretization))
Как видите, последние два параметра имеют значения по умолчанию.Это означает, что вы можете вызывать функцию следующим образом:
SquareRoot(b,a,sigma);
Это будет означать, что функция вызывается со значениями b, a и sigma.x0 и d (последние два параметра) получат значения по умолчанию, как написано в конструкторе.В этом случае это будет 0,0 для х0 и новый объект общего указателя типа дискретизации.Но так как вы хотите получить значение из последнего параметра, значение по умолчанию не является правильным выбором для вас.
Насколько я могу судить, функция SquareRootProcess будет вычислять некоторые вещи и затем сохранять данные по адресу указателей.Здесь мы переходим ко второй части Конструктора, &.
Символ & в списке параметров означает, что вы передаете функции ссылку на общий указатель.Это означает, что если вы вызовете функцию, ваш указатель (скорее всего) будет изменен и укажет на желаемое значение.Если функция имеет вызов по ссылке, вам на самом деле не нужно добавлять какие-либо знаки в вызове функции.Просто чтобы прояснить ситуацию, тот же процесс с некоторыми целыми числами:
void add(int a,int b,int& sum)
{
sum = a + b;
}
int main()
{
int sum;
add(5,12,sum);
// Now sum has the value 17
return 0;
}
Короче говоря: если функция ожидает ссылку на объект, вы просто передаете сам объект в вызове функции.
Итак, вернемся к вашему случаю:
Вам просто нужно создать общий указатель с дискретизацией типа и затем передать его в вызов функции.
const boost::shared_ptr<StochasticProcess1D::discretization> d(new StochasticProcess1D::discretizitation(/*Whatever constructor is needed for this type*/));
boost::shared_ptr<SquareRootProcess> squareRootProcess(new SquareRootProcess(b, a, sigma, miu0, d));
Это на самом деле должносделай сделкуПросто дайте мне знать, если это сработало или у вас есть дополнительные вопросы.С наилучшими пожеланиями