push_back 通过自创对象获取最后一个元素的向量
Posted
技术标签:
【中文标题】push_back 通过自创对象获取最后一个元素的向量【英文标题】:push_back getting a vector of last element by self created object 【发布时间】:2020-06-17 22:23:24 【问题描述】:我正在尝试阅读动物列表,这很好用。然后我想将每个字符串拆分为name
和cmc
的两个子字符串,这也可以正常工作。但是我的cout
不起作用。
比如我的animal.txt
是:
for
循环的输出应如下所示:
但实际输出是:
牛 牛 牛这是我的Animal.cpp
:
#include <string>;
#include <vector>;
#include <fstream>;
#include "Animal.h"
using namespace std;
string cmc;
string name;
void Animal();
void Animal(string nameA)
name = nameA;
void Animal(string nameA, string cmcValue)
name = nameCard;
cmc = cmcValue;
void Animal::setName(string names)
name = names;
void Animal::setCmc(string cmcvalue)
cmc = cmcvalue;
std::string Animal::getName()
return name;
std::string Animal::getCmc()
return cmc;
void Animal::openfileAnimal()
ifstream inFileAnimal;
inFileAnimal.open("Animals.txt");
if (inFileAnimal.fail())
cerr << "error open this file" << endl;
exit(1);
string itemsAnimal;
std::vector<Animal> AllAnimals;
while (getline(inFileAnimal, itemsAnimal))
Animal c;
string t1 = itemAnimal;
size_t pos = t1.find("|");
//name (setname(sub))
string sub = t1.substr(0, pos);
c.setName(sub);
string t2 = t1.substr(sub1.length() + 1, t1.length());
string sub2 = t2.substr(0, t2.length());
c.setCmc(sub2);
AllAnimals.push_back(c);
for (int i = 0; i < 2; i++)
std::cout <<AllAnimals.at(i).getName() << endl;
我阅读了其他类似我的 *** 问题,但对于我的示例,所有解决方案都不起作用。那么我的问题在哪里?我想这就像我一遍又一遍地修改同一个内存。
【问题讨论】:
为什么你的循环中有两次搜索|
?每行只包含一个|
字符。
可能需要Animal
的实现。
...那些方法不是构造函数,那些对象也不是类的成员......
【参考方案1】:
你有全局变量而不是类数据成员:
string cmc;
string name;
void Animal();
void Animal(string nameA)
name = nameA;
void Animal(string nameA, string cmcValue)
name = nameCard;
cmc = cmcValue;
因此,您只保留最新分配的值。此外,您可能将其视为构造函数的东西根本不是构造函数。构造函数应如下所示:
Animal::Animal(string nameA, string cmcValue)
: name(nameA), cmc(cmcValue)
注意初始化列表语法:这样可以避免像你这样的错误。
顺便说一句,在您的代码中 nameCard
根本没有定义。
【讨论】:
以上是关于push_back 通过自创对象获取最后一个元素的向量的主要内容,如果未能解决你的问题,请参考以下文章