首页 > 解决方案 > 如何在不知道将创建多少对象的情况下初始化对象指针向量?

问题描述

此代码运行不正常,因为它在代码块上不断返回 0xC0000005,在 CMD 上没有任何反应。我在网上查了一下,它说我应该在写入之前初始化向量但是如果我不知道用户要输入多少对象,我该如何初始化对象向量(因为它应该增加用户的更多输入用途)。

#include <string>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <sstream>
#include <cstring>
#include <vector>
#include <cstdio>
using namespace std;

class stock {
private:
    int sharenumber;
    float shareprice;
    string sharename;
public:
    stock(int x, string y,float z)
    :sharenumber(x),sharename(y),shareprice(z)
    {
        cout<<"An object has been created";
    }

    string getstring(){
        return sharename;
    }


};

int toint(char * x){
   int y;
   y = atoi(x);
   return y;
}

string tostring(char * x){
   stringstream ss;
   string z;
    ss<<x;
    z = ss.str();
   return z;
}

float tofloat(char * x){
   float u;
   u = atof(x);
   return u;
}


int main(int argc, char *argv[])
{
    char str1[]= "buy";

   vector <stock*> P_obj;

 if (strcmp(str1,argv[1]) == 0){
    cout<<"this ran"<<endl;
   P_obj.push_back(new stock(toint(argv[2]),tostring(argv[3]),tofloat(argv[4])));
    cout<<P_obj[0]->getstring();
}


return 0;
}

标签: c++vector

解决方案


在使用输入之前,您应该检查输入的数量。该argc参数将指示作为命令行参数给出了多少输入(包括第一个参数,它通常是可执行文件的名称)。

int main(int argc, char *argv[])
{
    char str1[]= "buy";

    vector <stock*> P_obj;

    if (argc > 1){ // check the number of input
        if (strcmp(str1,argv[1]) == 0){
            cout<<"this ran"<<endl;
            if (argc > 4) { // check the number of input
                P_obj.push_back(new stock(toint(argv[2]),tostring(argv[3]),tofloat(argv[4])));
                cout<<P_obj[0]->getstring();
            } else {
                cout<<"too few arguments for "<<str1<<endl;
            }
        }
    } else {
        cout<<"no command"<<endl;
    }


    return 0;
}

推荐阅读