我正在尝试阅读迷失的动物,这很好,比我想将字符串分成两个可以读取名称和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问题,但对于我的示例,所有解决方案均不起作用。所以我的问题出在哪里,我猜这是我一遍又一遍修改相同内存的原因。
您具有全局变量而不是类数据成员:
string cmc;
string name;
void Animal();
void Animal(string nameA) {
name = nameA;
}
void Animal(string nameA, string cmcValue) {
name = nameCard;
cmc = cmcValue;
}
结果,您仅保留最新分配的值。顺便说一下,nameCard
根本没有定义。