VS2017"非标准语法;使用'&'创建指向成员的指针"

时间:2017-10-04 16:57:11

标签: c++ visual-studio

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;
}

为什么会出现错误,说明&#39; DefInt :: BySimpson&#39;:非标准语法;使用&#39;&amp;&#39;创建指向成员的指针? 顺便说一下,我省略了一个类似的DefInt成员函数,虽然它与Bysimpson几乎相同,但它工作正常并且没有错误发生。我不懂为什么。 我把它放在这里。

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);
}

感谢。

1 个答案:

答案 0 :(得分:3)

在线

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

您可能打算拨打BySimpson,但忘记了()

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

你得到这个误导性错误的原因是因为预ISO标准化MyInt.BySimpson实际上意味着你想要的地址就像普通函数一样,函数名自己给出了函数的地址。然而,后来使用&amp;取一个成员的地址作为要求放在标准中。因此,Visual Studio认为您仍在使用旧语法,并希望您使用新语法。