繁体   English   中英

如何为 c++ 中对象指针的常量向量赋值?

[英]How to assign value to const vector of pointers of objects in c++?

我目前正在尝试将值分配给 const std::vector。 年龄是 class 源自 class 动物。

#include <iostream>
#include <vector>

class Animal{
  public:
    Animal(std::string name) : name_(name) {}
    std::string getName() {return name_;}
  protected:
    std::string name_;
};


class Age : public Animal
{
  public:
    Age(std::string name, int age) : Animal(name), age_(age) {}
  private:
    int age_;
};

class AllAnimals
{
  public:
    AllAnimals(){};
    void setVector(const std::vector<Age*> v) {all_animals_ = v;}
  private:
    const std::vector<Age*> all_animals_;
};



int main()
{
  AllAnimals animals();
  std::vector<Age*> all_animals;
  all_animals.push_back(new Age("Cat", 3));
  all_animals.push_back(new Age("Dog", 4));
  all_animals.push_back(new Age("Mouse", 2));
  all_animals.push_back(new Age("Duck", 1));
  return 0;
}

编译代码后,我收到错误消息:

 error: passing ‘const std::vector<Age*>’ as ‘this’ argument discards qualifiers [-fpermissive] void setVector(const std::vector<Age*> v) {all_animals_ = v;}

我的实现有什么问题,如何为 all_animals_ 分配值?

初始化后不能分配给向量,它是const 解决方案是初始化它。 由于您的代码正在处理原始拥有的指针,并且需要一些关于正确使用它们或使用智能指针的提醒,但这不是问题的主题,我让自己简单地举了很多例子:

#include <vector>

struct foo {
    const std::vector<int> x;
    foo(const std::vector<int>& a) : x(a) {}
};

int main() {
    std::vector<int> v{1,2,3,4};
    foo f(v);
}

成员在构造函数的主体执行之前被初始化,因此初始化它的地方是构造函数成员初始化列表。

请注意,使成员const很少是一个好主意。 例如,当实例具有const成员时,您不能复制它们。 如果您希望成员在构造后不被修改,这是封装真正得到回报的情况。 将成员设为私有,并且不提供来自外部的任何写访问权限。 然后从外部成员是不可修改的,但您仍然可以复制 class 的实例。

PS:这里的错误信息可能有点混乱。 它指的是std::vector= ,因此消息中的this是向量,而不是您的AllAnimals实例。 当成员 function 存在 const 正确性问题时,“将 XY 作为 'this' 参数传递会丢弃限定符”是典型的错误消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM