关于构造函数

学术版

entity @ 2024-11-29 18:39:03

学校里出了一道题,我写出了这样的代码

#include<iostream>
using namespace std;
class SPrime{
    private:
        int a[1001];
        int n;
    public:
        SPrime(){
            n=0;
        }
        bool prime(int x){
            for(int i=2;i*i<=x;i++)
                if(x%i==0) return false;
            return true;
        }
        void isSPrime(){
            for(int i=1000;i<=9999;i++){
                int t=i;
                bool isit=true;
                while(t){
                    if(!prime(t)){
                        isit=false;
                        break;
                    }
                    t/=10;
                }
                if(isit) a[++n]=i;
                isit=true;
            }
            return ;
        }
        void show(){
            for(int i=1;i<=n;i++){
                cout<<a[i]<<' ';
                if(i%6==0) cout<<endl;
            }
            return ;
        }
};
int main(){
    SPrime e;
    e.isSPrime();
    e.show();
    return 0;
}

这份代码不会报错且可以通过,但是如果要是使用了构造函数,也就是这样

int main(){
    SPrime e();
    e.isSPrime();
    e.show();
    return 0;
}

就会报错,报错信息为 [Error] request for member 'isSPrime' in 'e', which is of non-class type 'SPrime()'

想问问洛咕大佬们这是什么情况


by entity @ 2024-11-29 18:41:16

补:改成

SPrime e=new SPrime();

后,报错信息为[Error] conversion from 'SPrime*' to non-scalar type 'SPrime' requested


by yukimianyan @ 2024-11-29 18:45:45

SPrime e(); 圆括号改为花括号@entity


by yukimianyan @ 2024-11-29 18:47:33

c++ 版本不够的话,要不写 SPrime e = Sprime(); 算了


by entity @ 2024-11-29 18:47:41

@yukimianyan 改为花括号后,报错信息为

[Error] in C++98 'e' must be initialized by constructor, not by '{...}'


by entity @ 2024-11-29 18:49:10

@yukimianyan

ok行了,谢谢佬


|