I am currently programming a digital circuit simulator program (uni coursework) ...I have created a vector of objects...
vector <LogicGate*> theCircuit;
Inside logic gate there are functions for all logic gates! ...then there are seperate sub-classes that are derrived from class LogicGate to over-ride some functions to give the ability to create different types of logic; and, or, xor, not. My vector can contain any of these classes, this works fine...
Code:
int Circuit::addGate(int inType){
switch(inType){
case 0 : theCircuit.push_back(new InputGate(newID(), 0)); return 0;
case 1 : theCircuit.push_back(new InputGate(newID(), 1)); return 0;
case 2 : theCircuit.push_back(new AndGate(newID(), 2)); return 0;
case 3 : theCircuit.push_back(new OrGate(newID(), 3)); return 0;
case 4 : theCircuit.push_back(new XorGate(newID(), 4)); return 0;
case 5 : theCircuit.push_back(new NotGate(newID(), 5)); return 0;
default : return -1;
}
}
// NOTE: newID() is a small function that generates (and then returns) unique id codes.
// To give you an idea what the values are for constructing logic gates; the constructor for the andgate class...
// AndGate::AndGate(int inID, int inType){ .. sets id and logic gate type here .. }
So now i have my vector with the above logic gate objects inserted! ...I thought therefore, that i could easily do the following...
Code:
for (int i=0; i<theCircuit.size(); i++){
// is current gate an input gate?
if (theCircuit.at(i).getType() != 0) { ...some code here... }
}
with getType() function being declared in class LogicGate...
Code:
class LogicGate{
private:
int gateType; // The type of logic gate
int gateID; // The ID for the logic gate
int pID1; // The first parent for the logic gate
int pID2; // The second parent for the logic gate
int input1; // The first input value for the logic gate
int input2; // The second input value for the logic gate
int output; // The output value for the logic gate
public:
// Class Methods:
void setID(int); // sets the gate ID number
int getType(); // returns the gate type code
void setType(int); // sets the gate type code
int getID(); // returns gates ID
int getPID1(); // returns gates first parent ID
int getPID2(); // returns gates second parent ID
void setPID1(int); // sets ID of gates first parent
void setPID2(int); // sets ID of gates second parent
void setInput1(int); // sets gates first input value
void setInput2(int); // sets gates second input value
int getInput1(); // returns value of first input
int getInput2(); // returns value of second input
// Virtual Methods:
virtual int getOutput(); // returns gates output value
};
However; at compilation i get the error...
Code:
:\WORK\CIRCUIT.CPP(100) : error C2228: left of '.getType' must have class/struct/union type
Its confusing, because to me it appears that this should work fine!!! ...I tried a simpler version using vectors of objects and that worked fine, i could access all the objects functions using the vector.at(x).functionName() with no problems at all!!! so what is going on here??? ...anyone know what i am doing wrong???
Cheers!!! Matt..