我是OOP概念的新手,在尝试解决Project Euler Problem 7时,为了找到第1000个素数,我尝试使用类来做,但遇到了2个主要错误。
prime_n
我已将代码发布在此处供参考:
#include<iostream>
#include<cstdio>
using namespace std;
class prime_n
{
int j,k;
int n;
int *store;
public:
prime_n(int num)
{
n=num;
store[n];
}
static int isPrime(int j)
{
for(int i=2;i*i<=j;i++)
{
if(j%i==0) return 0;
}
return 1;
}
void find_n()
{
for(int i=0;i<n;i++)
{
store[i]=0;
}
store[0]=2;
j=3;
k=1;
while(store[n-1]==0)
{
if(isPrime(j)) store[k++]=j;
j+=2;
}
}
int get_num()
{
int value=store[n-1];
return value;
}
};
int main()
{
int num, req_num;
printf("Enter the position at which prime number is to be found ");
scanf("%d",&num);
printf("\nnumber = %d",num);
prime_n p = new prime_n(num);
req_num = p.get_num();
printf("The required prime number is %d\n",req_num);
return 0;
}
如果有人能帮助我找出实际出错的地方,那将是一个很大的帮助。非常感谢提前!
答案 0 :(得分:2)
使用
prime_n p(num);
或(在这种特殊情况下不推荐)
prime_n * p = new prime_n(num);
// some other code
req_num = p->get_num(); // note the -> operator replacing . in case of pointers
delete p;
第一种情况在堆栈上声明p
,当程序离开作用域时会自动解除分配(在这种情况下为main
函数)
第二个在堆上分配空间,p
是指向它的指针。您必须手动释放内存。
至于你的第二个问题,C ++的方式是
#include <iostream>
...
int num;
std::cout << "Enter the position at which prime number is to be found "
std::cin >> num;
std::cout << std::endl << "Number = " << num << std::endl;
答案 1 :(得分:1)
您提供了一个构造函数:
prime_n(int num)
{
n=num;
store[n];
}
我认为你的印象是store[n]
创建了一个包含n个元素的数组,但事实并非如此;它试图访问数组的第(n + 1)个元素。由于商店没有指向任何地方(毕竟我们在构造函数中),程序崩溃了。
您可能希望改为编写store = new int[num]
。
然后我看不到来自get_num()的find_n()调用是在main()中调用的,所以你的程序现在只返回一个随机值。