Hej
Her er en lille opfølgning på et tidligere indlæg jeg har haft.
Senere går jeg over til at benytte et map, men nu bruger jeg lige en vector fordi det er jeg bekendt med.
Mit problem lyder sådan her:
vector <string, Opcode> opcodeVector;
jeg vil køre igennem en løkke, der undersøger et dokument. Og hver gang løkken støder på "name: ", skal der sætte et nyt par ind i vectoren, med navnet som nøgle og en unavngivet Opcode som værdi. De efterstødende linier skal så indsættes i den Opcode.
første del har jeg gjort således (jeg har initialiseret Opcode:
pcode opcode; ):
if(!line.substr(0,6).compare("name: ")){
OpcodeList::opcodeVector.push_back(opcode);
}
Jeg kan ikke helt pin-pointe problemet, det er formentlig, at jeg ikke får lavet et nyt Opcode objekt, men overskriver det gamle.
Tak
Mvh
Carsten
Her er opcodelisting.cpp (ignorer "input" "output" etc løkkerne indtil videre):
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include "OpcodeList.h"
#include "Opcode.h"
using namespace std;
//Fields
vector <Opcode> OpcodeList::opcodeVector;
//default constructor
OpcodeList::OpcodeList()
{
}
//ACCESSORS
void OpcodeList::setOpcodeList(string dataFile)
{
//intialize
string line;
string data = dataFile;
ifstream file;
ofstream out;
Opcode opcode;
// Throw exceptions whenever "failbit" or "badbit" gets set
//file.exceptions (ifstream::failbit | ifstream::badbit);
try{
//Open opcodes list
file.open(data.c_str());
//open outfile
out.open("c:\\\\opcodesout.txt");
//get all data while not eof
while (file){
getline(file, line);
if(!line.substr(0,6).compare("name: ")){
OpcodeList::opcodeVector.push_back(opcode);
}
else if(!line.substr(0, 13).compare("description: ")){
opcode.setDescription(line.substr(13, string::npos));
out << "description: " << line.substr(13, string::npos) << endl;
}
else if(!line.substr(0, 8).compare("output: ")){
opcode.setOutput(line.substr(8, string::npos));
out << "output: " << line.substr(8, string::npos) << endl;
}
else if(!line.substr(0, 9).compare("command: ")){
opcode.setCommand(line.substr(9, string::npos));
out << "command: " << line.substr(9, string::npos) << endl;
}
else if(!line.substr(0, 7).compare("input: ")){
opcode.setInput(line.substr(7, string::npos));
out << "input: " << line.substr(7, string::npos) << endl;
}
else if(!line.substr(0, 10).compare("optional: ")){
opcode.setOptional(line.substr(10, string::npos));
out << "optional: " << line.substr(10, string::npos) << endl;
}
else {}
}
}
catch (ifstream::failure e){
cout << "error: " << e.what() << endl;
}
file.close();
out.close();
}
//MUTATORS
int OpcodeList::getOpcodeListSize(){
return OpcodeList::opcodeVector.size();
}