成员函数指针

问题描述 投票:0回答:1

我目前正试图创建一个程序,通过向一个类的成员函数传递一个数组来计算给定时间值的火箭的质量。我想为数组使用一个指针。我如何去做。指针应该在int main或者类中初始化。感谢任何建议。

#include <cmath>
#include <cstring>
#include <fstream>
#include<iostream>

using namespace std;

class equip
{
public:
    double mass[999999999], velocity, height, *time[999999999];
    double calcmass(double* time); 
    double calcvelocity();
    double calcheight();
    double calctime();
private:
    double T = 7000;
    double g = 32.2;
    double K = 0.008;
};

double equip::calcmass(double* time)
{
    int i = 0;
    for(i=0; i=999999999; i++)
    {
        return mass[i] = (3000 - 40 * time[i]) / g;
    }
}

int main()
{
    int i = 0;
    equip rocket;
    ifstream infile;
    string filename;
    cout<<"Enter input file name for time values: ";
    cin>>filename;
    infile.open(filename.c_str());

    while(infile.fail())
    {
        cerr<<"Error opening file. \n";
        cout<<"Enter file name: ";
        cin>>filename;
        infile.open(filename.c_str());
    }

    for(i=0; i<999999999; i++)
    {
        infile>>rocket.time[i];
    }

    for(i=0; i<999999999; i++)
    {
        cout<<rocket.mass[i];
    }

    return 0;
}
c++ arrays class pointers
1个回答
4
投票

equip 是一个非常大的对象。事实上,大约14千兆字节。

自动变量,如 equip rocket 在执行栈上分配。大多数桌面系统的执行堆栈的默认大小大约是1到几兆字节。

一个14千兆字节的对象肯定会溢出1兆字节的栈。

解决方法 对于大型数组总是使用动态分配,比如这里使用的。最简单的解决方案是使用 std::vector. 另外,你确定你需要这么大的数组吗?


for(i=0; i=999999999; i++)

这个循环看起来像是永远不会结束,因为9999999999永远是真。

{
        return ....

但事实上,这个循环永远不会重复,因为函数会立即返回。这两个选择都没有意义,虽然结合起来它们的傻气有点互相抵消。


0
投票

把数组的大小改成一个实用的实数。如果不能 ,就通过动态内存分配。

© www.soinside.com 2019 - 2024. All rights reserved.