出错is not a member of '`global namespace'?

#include <iostream.h>

class Factorial
{

private:
int n;
public :
Factorial(int a )
{
n=a;

}
int multi();
void print ()
{
cout<<n<<"!="<<multi()<<endl;

}

};

int Factorial()::multi()
{
for (int i=0,s=1;i<=n;i++)
s=s*i;
return s;

}
int main()
{
int a;
cin>>a;
Factorial A(a);
A.print();

}

慕侠2389804
浏览 379回答 3
3回答

哆啦的时光机

int Factorial()::multi() //这一句错了{for (int i=0,s=1;i<=n;i++)s=s*i;return s;}在C++中::符号代表范围限定作用,一般符号前面是类的名称,符号后面是成员函数的名称。上面的程序中,::符号前面明显不是类的名字而是一个函数,编译器于是把它当成命名空间的名字,判定multi()是命名空间的成员函数,这样当然是错的。本来就是写错了。

白猪掌柜的

int Factorial()::multi(){for (int i=0,s=1;i<=n;i++)s=s*i;return s;}改为:int Factorial::multi(){int s = 1;for ( int i = 1; i <= n; ++i ){s = s * i;}return s;}三个问题:一、在类定义外定义成员函数格式为:返回类型 类名::成员函数名()例如: int Factorial::multi()二、循环的 s 变量必须提到外面,才能 return,循环内变量 s 在循环结束以后将被销毁,因此无法 return s;三、循环的 i 变量的值应为 1,而不是 0。如果为 0,结果全部为 0。

大话西游666

int Factorial()::multi() 应该是:int Factorial::multi()这是类外声明的固定格式。其实意思是说multi()这个函数是类Factorial的,所以是不用在Factorial后面加()的。
打开App,查看更多内容
随时随地看视频慕课网APP