gpt4 book ai didi

c++ - 如何使用指向对象的共享指针 vector

转载 作者:行者123 更新时间:2023-11-30 00:51:56 24 4
gpt4 key购买 nike

我正在尝试使用指向对象的共享指针 vector 。我在获取任何成员变量时没有遇到任何问题,但是当我尝试设置成员变量时似乎没有任何效果。我一定在这里遗漏了一些东西,因为这似乎应该有效。

#include <iostream>
#include <string>
#include <boost/random.hpp>
#include <iomanip>

using std::cin;
using std::cout;
using std::endl;
using std::string;

class vehicle{

public:
vehicle(){};
~vehicle(){};

virtual string getName(){
return this->name;
}

virtual string setName(string n){
this->name = n;
}

friend std::ostream& operator <<(std::ostream& outs, vehicle &v){
outs << v.getName();
return outs;
}

protected:
string name;

};

class car : public vehicle{

public:

car(){
this->name = "default name";
}

string setName(string n){
this->name = n;
}

string getName(){
return this->name;
}
};

typedef std::shared_ptr<vehicle> vehicle_ptr;

cout 将打印字符串“默认名称”,然后当我尝试更改名称时它会导致段错误。

int main(){
std::vector<vehicle_ptr> vehicleLot;

vehicleLot.push_back(std::shared_ptr<car>(new car));

cout << vehicleLot[0]->getName() << endl;

vehicleLot[0]->setName("new name"); // this gives a seg fault

}

最佳答案

您的 setName 方法当前的返回类型是 std::string 而不是 void。修复 vehiclecar 类中的签名。

在没有返回语句的情况下到达期望返回类型的函数的末尾是未定义的行为。为您选择的编译器打开适当的警告是个好主意,因为这很容易被大多数编译器捕获。

关于c++ - 如何使用指向对象的共享指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20314100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com