【问题标题】:Trying to assign derived class object address to vector of base class pointers试图将派生类对象地址分配给基类指针向量
【发布时间】:2017-10-22 01:38:10
【问题描述】:

我有两个类设置如下

class A
{}

class B : A
{}

并且试图拥有一个可以容纳任何 A 类对象或其使用指针的派生类型的向量。我试着做:

vector<A*> objectsvar;

B var1();

objectsvar[0] = var1;

// Also tried = *var1;

有没有办法做这种事情?拥有一个可以容纳任何类型 A 或其派生类而不丢失任何东西的容器?

【问题讨论】:

  • B var1(); 声明一个不带参数并返回B 的函数;不是B 类型的变量。删除括号。
  • 向量为空; objectsvar[0] 访问越界索引。
  • 在你最喜欢的 C++ 教科书中阅读&amp; 运算符的地址。

标签: c++ pointers inheritance containers


【解决方案1】:

是的,您可以这样做。不幸的是,正如 cmets 中已经指出的那样,您在尝试实现它时犯了几个错误:

  • B var1(); 不调用默认构造函数,而是声明一个函数。

  • 要将元素添加到向量,请使用push_back(或insert、emplace 或emplace_back)。在您的情况下,下标运算符尝试访问不存在的元素。

  • 要获取变量的地址,请使用&amp;。 * 正好相反,它取消引用一个指针。

你想要的是:

vector<A*> objectsvar;
B var1;
objectsvar.push_back(&var1);

【讨论】:

    【解决方案2】:

    改用统一初始化器 {}:

    B var1{};
    

    在这种情况下,B var1(); 声明了一个函数。

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 2014-08-11
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多