У меня есть функция noise.cpp, которая в настоящее время имеет вид,
double* noise(int* steps, ...)
//some code
std::array<double, *steps> NoiseOut;
//rest of code
, которая проверяется и используется cppnoise.cpp,
#include <random>
#include <cmath>
#include<stdio.h>
#include <iostream>
#include "noise.h"
main(){
double* out;
int steps = 8;
int* ptr = &steps;
out = noise(ptr, 1, 1000, 0.1, 1, 3);
printf("TEST \n");
std::cout << out[0];
}
С файлом заголовка,
extern double* noise(int*, double, double, double, double, double);
Ранее я обращался к функции noise.cpp через Python, где изначально находился массив NoiseOut, double* NoiseOut = new double[steps];
с желаемыми результатами, но этот метод привел к утечке памяти.
Изначально япопытался удалить выделенную память. Но функция возвращает NoiseOut, поэтому я не уверен, возможно ли это? Вместо этого я обнаружил, что современный способ заключается в использовании std :: array, так как он поставляется с какой-то формой сборки мусора. Если бы я попытался сделать,
double* noise(int steps, ...)
std::array<double, steps> NoiseOut;
Мне сказали, что шаги не являются постоянным выражением. Я пробовал все возможные варианты constexpr
, const
и static
, но безуспешно. Обычно с такой же ошибкой error: ‘steps’ is not a constant expression
. Кроме того, причина, по которой я передаю указатель из cppnoise.cpp в noise.cpp, заключается в том, что я где-то читал, что с указателем легче работать, позже во время компиляции? Так что, может быть, я мог бы преобразовать его в постоянное выражение? Вероятно, лихорадочная мечта.
Итак, как я могу объявить целочисленное значение в программе, которое я передаю в функцию, которую можно использовать в массиве std ::, не вызывая этой ошибки?
ПРИМЕЧАНИЕ. Я очень плохо знаком с c ++ и работаю в основном с SQL, Python, R и SageMath.