2017-10-04 51 views
-3
class DefInt 
{ 
private: 
    double a; 
    double b; 
    double (*f)(double x); 
    int N; 
public: 
    DefInt(double c, double d, double (*g)(double y)) 
    { 
     a = c; 
     b = d; 
     f = g; 
    } 

    double BySimpson() 
    { 
     double sum = f(a) + 4 * f((a + b)/2) + f(b); 
     return sum * (b - a)/3; 
    } 

}; 
double g(double y) 
{ 
    double sum = 1 - y * y + y * y * y; 
    return sum; 
} 
int main() 
{ 
    int c = 1; 
    int d = 2; 
    double y; 
    DefInt MyInt(c, d, g); 
    cout << "BySimpson:" << MyInt.BySimpson << endl << endl; 
    system("pause"); 
    return 0; 
} 

なぜ「DEFINT :: BySimpson」というエラーがあります:非標準の構文は次のとおり。メンバへのポインタを作成するには '&'を使用しますか? ところで、私はBysimpsonとほぼ同じですが、同様のDefIntメンバー関数を除外しましたが、正常に動作し、エラーは発生しません。私はなぜなのか理解していない。 私はここにそれをアタッチしました。VS2017「非標準の構文メンバーtへのポインタを作成するために使用 『&』」

double ByTrapzold(int n) 
{ 
    N = n; 
    double sum = f(a + (b - a)/N); 
    for (int i = 2; i <= N; i++) 
    { 
     sum = sum + 2 * f(a + (b - a) * i/N); 
    } 
    sum = sum + f(a + (b - a) * (N + 1)/N); 
    return sum * (b - a)/(2 * N); 
} 

ありがとうございます。行で

+4

'()'のセットがありません。 'cout <<" BySimpson: "<< MyInt.BySimpson << endl << endl;'は 'cout <<"になります。BySimpson: "<< MyInt.BySimpson()<< endl << endl;' – NathanOliver

+0

ありがとう。私はちょうど学び始めた、そして、変数が必要でなければ、()を入れないことは大丈夫だと思った。 –

+0

@YimengMaなぜあなたはそれを考えましたか? [無作為にコーディングして学習するのではなく、C++の良い本を読む](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) –

答えて

3

cout << "BySimpson:" << MyInt.BySimpson << endl << endl; 

おそらくBySimpsonへの呼び出しを行うためのものが、あなたは、あなたがこの誤解を招くようなエラーが出る理由があるため、事前のISO標準化のMyInt.BySimpsonある()

cout << "BySimpson:" << MyInt.BySimpson() << endl << endl; 

を忘れてしまいました実際には、通常の関数と同じようにアドレスを必要とすることを意味しますが、関数名は関数自体のアドレスになります。その後、会員の住所を取るための&の使用が要件として標準に入れられました。したがって、Visual Studioでは、古い構文を使用していると考えて、新しい構文を使用する必要があります。

+3

タイプミスにはお答えください。我々は彼らに近い投票理由を持っている。 – NathanOliver

+0

ありがとうございます。私はちょうど学び始めた、そして、変数が必要でなければ、()を入れないことは大丈夫だと思った。 –

+0

「MyInt.BySimpson」**は決してMicrosoftの想像を除いて、あなたがその機能のアドレスを望んでいたことを意味しませんでした。それは言語の一部ではありませんでした。マイクロソフトは非公式に、標準化委員会がコンパイラのバグを支持していることを示唆する論文を回覧した。紙は累積して肩をすくめてすぐに消えた。 –

関連する問題