push_back通过自己创建的对象获取最后一个元素的向量

问题描述 投票:0回答:1

我正在尝试阅读迷失的动物,这很好,比我想将字符串分成两个可以读取名称和cmc的子字符串更好,这也很好。但是我的提示不起作用。

例如我的animal.txt是:

Dog|hi 
cat|miau
cow|hihi

我的for循环输出应如下所示:

Dog
cat
cow

但是实际输出是:

cow
cow
cow

这里是我的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;
    }

}

我读了另一个类似于我的stackoverflow问题,但对于我的示例,所有解决方案均不起作用。所以我的问题出在哪里,我猜这是我一遍又一遍修改相同内存的原因。

c++ vector push-back
1个回答
0
投票

您具有全局变量而不是类数据成员:

string cmc;
string name;

void Animal();

void Animal(string nameA) {
    name = nameA;
}

void Animal(string nameA, string cmcValue) {
    name = nameCard;

    cmc = cmcValue;
}

结果,您仅保留最新分配的值。顺便说一下,nameCard根本没有定义。

© www.soinside.com 2019 - 2024. All rights reserved.