Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;对象数组,初始化失败_C++_Arrays_Class_Object_Constructor - Fatal编程技术网

C++ c++;对象数组,初始化失败

C++ c++;对象数组,初始化失败,c++,arrays,class,object,constructor,C++,Arrays,Class,Object,Constructor,需要使用类对象数组为学校做一个项目。我们不能使用向量,所以任何暗示它们的答案都不会有帮助。我一直在尝试创建这样的and数组,然后在每个对象中输入一个名称。我尝试运行for循环来实现这一点,但它一直跳过数组中的第一个对象。帮忙 #include <iostream> #include <cstring> using namespace std; class Car { private: char* driver; public: void setDr

需要使用类对象数组为学校做一个项目。我们不能使用向量,所以任何暗示它们的答案都不会有帮助。我一直在尝试创建这样的and数组,然后在每个对象中输入一个名称。我尝试运行for循环来实现这一点,但它一直跳过数组中的第一个对象。帮忙

#include <iostream>
#include <cstring>

using namespace std;

class Car
{
  private:
  char* driver;

  public:

  void setDriver(char* name)
  { 
     driver = name;
  }

  void getDriver()
  {
    cout<<driver;
  }

};

int main()
{

int numDrivers;
cout<<"How many drivers would you like?";
cin>>numDrivers;

Car* roster = new Car[numDrivers];

for(int i=0;i<numDrivers;i++)
{
  char* name;
  name = new char[20];
  cout<<"name:";
  cin.getline(name, 20);

  roster[i].setDriver(name);
}

for(int i=0;i<numDrivers;i++)
{
  roster[i].getDriver();
  cout<<".\n";
}
  return 0;
}

非常感谢您的帮助。

根据评论,同样的问题在

这影响代码的确切方式如下所示。 执行这些行以从输入中读取数字4(例如):

cout<<"How many drivers would you like?";
cin>>numDrivers;
因此,程序将“name”打印到控制台并等待,直到有一些输入被换行符终止。但是已经有类似的输入等待读取(从
cin>>numDrivers
中遗留下来)。 因此,程序读取回车符时,前面没有任何内容。 它将其作为一个空字符串进行处理,并继续进行第二次迭代
根据评论,同样的问题在

这影响代码的确切方式如下所示。 执行这些行以从输入中读取数字4(例如):

cout<<"How many drivers would you like?";
cin>>numDrivers;
因此,程序将“name”打印到控制台并等待,直到有一些输入被换行符终止。但是已经有类似的输入等待读取(从
cin>>numDrivers
中遗留下来)。 因此,程序读取回车符时,前面没有任何内容。 它将其作为一个空字符串进行处理,并继续进行第二次迭代
循环的一部分。

问题似乎在于行中有一个“悬空”\n换行符

cin>>numDrivers;
上面的代码不使用该新行字符。所以当代码到达

cin.getline(name, 20);
它将新行字符作为一行使用并移动一行

修复方法是在第一次调用cin后忽略所有字符,如下所示

void ignore_line ( std::istream& in )
{
    in.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );
}

int main()
{

    int numDrivers;
    cout<<"How many drivers would you like?";
    cin>>numDrivers;
    ignore_line(cin);  // Consume newline

    Car* roster = new Car[numDrivers];

    for(int i=0;i<numDrivers;i++)
    {
        char* name;
        name = new char[20];
        cout<<"name:";
        cin.getline(name, 20);

        roster[i].setDriver(name);
    }

    for(int i=0;i<numDrivers;i++)
    {
        roster[i].getDriver();
        cout<<".\n";
    }
    return 0;
}
void ignore_行(std::istream&in)
{
in.ignore(std::numeric_limits::max(),'\n');
}
int main()
{
国际努姆德里弗斯;
coutnumDrivers;
忽略换行符(cin);//使用换行符
车*花名册=新车[numDrivers];

对于(int i=0;i而言,问题似乎在于行中有一个“悬空”\n换行符

cin>>numDrivers;
上面的代码不使用新行字符。所以当代码到达

cin.getline(name, 20);
它将新行字符作为一行使用并移动一行

修复方法是在第一次调用cin后忽略所有字符,如下所示

void ignore_line ( std::istream& in )
{
    in.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );
}

int main()
{

    int numDrivers;
    cout<<"How many drivers would you like?";
    cin>>numDrivers;
    ignore_line(cin);  // Consume newline

    Car* roster = new Car[numDrivers];

    for(int i=0;i<numDrivers;i++)
    {
        char* name;
        name = new char[20];
        cout<<"name:";
        cin.getline(name, 20);

        roster[i].setDriver(name);
    }

    for(int i=0;i<numDrivers;i++)
    {
        roster[i].getDriver();
        cout<<".\n";
    }
    return 0;
}
void ignore_行(std::istream&in)
{
in.ignore(std::numeric_limits::max(),'\n');
}
int main()
{
国际努姆德里弗斯;
coutnumDrivers;
忽略换行符(cin);//使用换行符
车*花名册=新车[numDrivers];

对于(int i=0;我能解释一下为什么不能使用向量吗?像iostream和string library这样的东西在内部使用了很多标准库功能,所以禁止这样做似乎完全是武断的。告诉你的学校现在是2015年。为什么不使用编译器提供的资源来避免内存泄漏和bug呢?正如@user657267所说,这不是你的for i循环这意味着
cin>>numDrivers
在输入中留下了行尾,然后由您的第一次
getLine
调用读取。我讨厌像“使用向量,它是2015”这样的评论在正确使用裸新/删除的过程中,有一个有效的观点,不实践,这是很难学习的。事实上,代码发布有许多缺陷是另一回事…@ VSOFTCO:没有必要学习STL在2015。一个人应该学习的C++标准库,在1998被引入,并已多次更新。你能解释一下为什么不能使用向量吗?像iostream和string library这样的东西在内部使用了很多标准库功能,所以禁止这样做似乎完全是武断的。告诉你的学校现在是2015年。为什么不使用编译器提供的资源来避免内存泄漏和bug呢?正如@user657267所说,这不是你的for循环,而是
cin>>numDrivers
在输入中留下行尾,然后由您的第一次
getLine
调用读取。我讨厌像“使用向量,它的2015”这样的评论学习正确使用裸NeX/Delphi是有效的,不需要实践,这是很难学习的。事实上,张贴的代码有很多缺陷。…VSOFTCO:没有必要学习STL。2015,学习C++标准库,它在1998被引入,并且已经更新了几次。It’他能纠正这个,绝对是正确的答案。我的英雄!他能纠正这个,绝对是正确的答案。我的英雄!!