2017-10-04 76 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”:非标准语法;使用'&'来创建一个指向成员的指针? 顺便说一句,我ommited一个类似的DefInt成员函数,虽然它几乎相同的Bysimpson,它工作正常,没有错误发生。我不懂为什么。 我已经在这里了解它。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 <<“By Simpson:”<< 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来电,但你忘了()

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

你得到这个误导性的错误的原因是因为前期ISO标准化MyInt.BySimpson实际上意味着你想要的地址就像正常的函数一样,函数名称本身给出函数的地址。然而,后来使用&作为一个成员的地址被作为一个要求放入标准。因此,Visual Studio认为您仍在使用旧的语法,并希望您使用新的语法。

+3

请不要回答错字问题。我们有他们的投票理由。 – NathanOliver

+0

谢谢。我刚开始学习,我认为如果不需要变量,就不要放一个()。 –

+0

'MyInt.BySimpson' **从来不**表示你想要的功能的地址,除了微软的想象。它从来不是语言的一部分。微软非正式地散发了一篇文章,建议标准委员会认可他们的编译器的bug;这篇论文得到了累积的耸肩,并且很快消失了。 –

相关问题