Hej
Jeg har lidt problemer med at forstå hvad jeg selv har gang i.
Jeg har lavet en klasse "Opcode" og en anden klasse "OpcodeList" - idéen er så, at OpcodeList has an Opcode, derfor har jeg lavet en vector i OpcodeList der består af Opcode objekter.
Nu er det så, at jeg ikke kan lure hvordan jeg skriver data til den specifikke Opcode der gerne skulle være på et specifikt sted i OpcodeListen.
OK, lidt tricky at forklare, her er koden:
(jeg har markeret hvor mit problem er i OpcodeList.cpp)
Jeg får følgende fejl:
error C2352: 'Opcode::setName' : illegal call of non-static member function
Mvh
Carsten
Main:
#include "OpcodeList.h"
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <vector>
using namespace std;
//
//
//
int main(int argc, char** argv) {
OpcodeList opcodeList;
opcodeList.setList();
/*for(int i = 0; i < opcodeList.listSize; i++)
{
string opcode = opcodeList.getList(i);
cout << "Element " << i << " is: " << opcode << endl;
}*/
return (EXIT_SUCCESS);
}
Opcode.h:
#ifndef _OPCODE_H
#define _OPCODE_H
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Opcode
{
public:
//Constructor
Opcode();
//Accessors
void setName(string name);
void setSymbol();
void setSyntax();
void setExamples();
void setDescription();
void setSeeAlso();
void setCredits();
private:
string name;
string symbol;
vector <string> syntax;
string examples;
string description;
string seeAlso;
string credits;
};
#endif /* _OPCODE_H */
Opcode.cpp:
#include "Opcode.h"
#include <iostream>
#include <string>
#include <vector>
//Fields
//Default constructor
Opcode::Opcode(){}
//set opcode name
void Opcode::setName(string name)
{
Opcode::name = name;
}
void Opcode::setSymbol()
{
}
void Opcode::setSyntax()
{
}
void Opcode::setDescription()
{
}
void Opcode::setSeeAlso()
{
}
void Opcode::setCredits()
{
}
void Opcode::setExamples()
{
}
OpcodeList.h:
#ifndef _OPCODELIST_H
#define _OPCODELIST_H
#include "Opcode.h"
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
class OpcodeList
{
public:
//Constructor
OpcodeList();
//Accessors
Opcode getList(int address);
//mutators
static void setList();
//services
static int listSize;
private:
static vector <string> fileList;
static vector <Opcode> opcodeList;
};
#endif /* _OPCODELIST_H */
OpcodeList.cpp:
#include "OpcodeList.h"
#include "Opcode.h"
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <vector>
using namespace std;
//Fields
vector <Opcode> OpcodeList::opcodeList;
int OpcodeList::listSize;
//Default constructor
OpcodeList::OpcodeList()
{
}
/* CREATE OPCODELIST
* Open stream to opcodes.txt.
* make a vector of opcodes
* add a second dimension with description an "symbol"*/
void OpcodeList::setList()
{
//open stream
ifstream fin("c:\\\\xml\\\\opcodes.txt");
//try catch if filestream is open
try
{
listSize = 0;
string line;
if (fin.is_open())
{
//While not eof
while ( getline(fin, line) )
{
//Remove .xml from string
//and print to opcodeList
string::size_type loc = line.find(".xml", 0);
if(loc != string::npos)
{
if(line.find("<opcode name="))
{
int start = line.find_first_of("\\"");
int end = line.find_last_of("\\"");
//HER ER MIT PROBLEM, NEDENSTÅENDE ER JO TYDELIGVIS UFÆRDIGT, MEN JEG KAN IKKE LURE HVORDAN JEG SKAL GØRE DET
opcodeList.push_back(Opcode::setName(line.substr(start, (end-start))));
}
}
}
}
}
//this catch is simplified
catch (exception&)
{
cout << "File not loaded" << endl;
}
//Close stream
try
{
fin.close();
}
catch(exception&)
{
cout << "file could not be closed" << endl;
}
}
Opcode OpcodeList::getList(int address)
{
return opcodeList.at(address);
}
PS: Generelle kommentarer velkomne, til en begynder
Indlæg senest redigeret d. 18.10.2007 11:51 af Bruger #12570