以下は、私が実行したいコードの部分です。complex<double>
の値を返すメイン関数内で実行する関数があります(dN
)。関数内の関数の使用
#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;
};
エラーが続く。最終的には、私の主な機能のなかでタイプcomplex<double>
の出力を返す関数dN
を使いたいと思っていますが、これを実装するには最高の/操作上の方法が不明です。
一部の*コンパイラは、実際には標準C++ 11の一部ではないネストされた関数(処理する言語の拡張機能として)を受け入れます。 GCCはCのための[ネストされた関数](https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.htm)を受け入れます。 –
@BasileStarynkevitchそれは本当ですが、私は最後の時間を思い出すことができません'-pedantic'フラグなしでコンパイルされます。 – DeiDei
@DeiDei Ahhはい、申し訳ありません。最初の試みは、あなたが言ったように入れ子関数を使用することでしたが、後でmain関数の外のクラスに変更しました(これは上記のコードです)。あなたの答えをありがとうございます - それは動作しているように見えますが、私はこの時点でコードをテストしており、まもなくあなたに連絡します。単に静的な作業を追加するのはなぜですか? – Mathews24