Ниже приведен фрагмент кода, который я пытался запустить там, где у меня есть функция, которую я хочу запустить (dN
) в моей основной функции, которая возвращает значение типа complex<double>
.Использование функций внутри функций
#include <iostream>
#include <complex>
#include <cmath>
using namespace std;
const complex<double> Im1(0.0,1.0); //imaginary number definition
class Functions{
public:
complex<double> dN(complex<double> **N, int k, int i, complex<double> kN, double T1){
complex<double> OUT = Im1*(N[k][i]+kN)/(T1);
return OUT;
};
};
int main(int argc, const char * argv[]) {
//...more code here
complex<int> **NM = new complex<int>*[1000]; //1000x500 array
//run loop to initialize
for (int i = 0; i < 1000; ++i)
{
NM[i] = new complex<int>[500];
}
complex<double> dN_OUT = Functions::dN(**NM,1,20,0.,20.);
return 0;
};
Хотя этот код не работает и возвращает ошибку: Call to non-static member function without an object argument
Основываясь на моем понимании, C++ не позволяет nested functions и мой код выше не будет работать, потому что я называю отдельную функцию в моей главной функции , Хотя (по ссылке), похоже, можно реализовать «локальные классы», определив функцию внутри структуры, которая должна находиться внутри основной функции. Хотя, когда я пытаюсь это сделать:
int main(int argc, const char * argv[]) {
complex<int> **NM = new complex<int>*[1000]; //1000x500 array
//run loop to initialize
for (int i = 0; i < 1000; ++i)
{
NM[i] = new complex<int>[500];
}
struct Functions{
complex<double> dN(complex<double> **N, int k, int i, complex<double> kN, double T1){
complex<double> OUT = Im1*(N[k][i]+kN)/(T1);
return OUT;
};
};
complex<double> dN_OUT = Functions::dN(**NM,1,20,0.,20.);
return 0;
};
ошибка сохраняется. В конечном счете, я просто хочу использовать функцию dN
, которая возвращает выход типа complex<double>
в моей основной функции, но я не уверен в лучшем/рабочем способе реализовать это.
Некоторые * компиляторы * принимают вложенные функции (как расширение языка, которым они обрабатываются), которые действительно не являются частью стандартного C++ 11. GCC принимает [вложенные функции] (https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.htm) для C, а не для C++ –
@BasileStarynkevitch Это правда, но я не могу вспомнить последний раз, когда я скомпилированный без флага '-pedantic'. – DeiDei
@DeiDei Ahh да, извините. Моя первоначальная попытка состояла в том, чтобы использовать вложенную функцию, как вы сказали, хотя впоследствии я заменил ее на класс вне основной функции (это код, вышеописанный). Спасибо за ваш ответ - он работает, хотя я просто тестирую код на этом этапе и скоро вернусь к вам. Просто для уточнения, почему просто добавление статической работы? – Mathews24