i have class, takeenum passes enum type mydata data class adt store in queue. every aspect of code works fine except when try print out dequeued, before dequeuing it. rather print out dequeued, it's integer corresponding value switch statement. programs runs fine except error. below codes.
main.cpp enum mydata{one, two, three}; char* mydatastring(mydata type) { char* s = ""; switch (type) { case one: s = "one"; break; case two: s = "two"; break; case three: s = "three"; break; } return(s); } class takes enum type has following definitions:
takeenum::takeenum() { } mydata takeenum::getdata() const { return mydata(type); } mydata::takeenum(mydatatype) : type(type) { } ostream& operator<<(ostream& say, const takeenum& takeenumobj) { << takeenumobj.gettype(); return say; } operator<< friend takeenum class
in stack , queue class takes mydata enum type, have following methods:
adt::adt(int osize, int ssize) : queuesize(osize), stacksize(ssize), top(-1), rear(-1), front(-1) { queuearr = new mydata[queuesize]; stackarr = new mydata[stacksize]; } insert enum type data queue.
bool adt::enqueue(mydata type) { if (isqueuefull()) return false; else if (isqueueempty()) { front = 0; rear = 0; } else rear++; queuearr[rear] = type; return true; } this method returns element in front of queue.
mydata adt::peekqueue() { if (!isqueueempty()) return queuearr[front]; /*else return null;*/ } this method should enqueue queue, fail if queue empty.
void adt::dequeue() { if (isqueueempty()) return; else { if (front == rear) front = rear = -1; else if (front == queuesize && rear == queuesize) front = 0; else front++; return; } } this meant push single enum type data (mydata) stack, return false if stack if full.
bool adt::pushshelf(mydata adata) { if (isshelffull()) return false; else { top++; stackarray[top] = adata; } return true; } this piece of code should peek , return front element in queue, push stack.
int adt::inserttostack() { int = 0; if (isqueueempty()) return i; if (isstackfull()) { cout << "your stack full.\n"; return i; } while ((!isqueueempty()) && (!isstackfull())) { pushshelf(peekorder()); cout << peekqueue()"; dequeue(); i++; } return i; } when run code this:
int main() { adt adt(10, 30); adt.enqueue(one); adt.enqueue(two); adt.enqueue(three); adt.inserttostack(); //this should cout one, 1 adt.inserttostack(); //this should cout two, 2 adt.inserttostack(); //this should cout three, 3 takeenum takeenumobj; std::cout << mydatastring(takeenumobj.getdata()) ; //nothing displayed here cout << takeenumobj; //overload takeenum class, -858993460. expect have enum data. } note : assignment.
update:
i able solve doing following:
changed
ostream& operator<<(ostream& say, const takeenum& takeenumobj) { << takeenumobj.gettype(); return say; } to
ostream& operator<<(ostream& say, const takeenum& takeenumobj) { << mydatastring(takeenumobj.getdata()); return say; } then peeked stackarr return mydata enum type, used initialize mydata type private data inside takeenum::setdata(). therefore, getdata() have pass mydatastring function. std::cout << mydatastring(takeenumobj.getdata())
takeenum::takeenum() { } doesn't set type anything,
takeenum takeenumobj; has undefined type ,
std::cout << mydatastring(takeenumobj.getdata()) ; will print usable output dumb luck.
cout << takeenumobj resolves printing numerical value of type, undefined value, -858993460 in case.
as printing out enumerated value's name, sorry. can't that.
cout << peekqueue(); will print numerical value. while you, programmer, gets nice pretty string work with, computer sees number. need use mydatastring function recover name or create array of strings mirrors enum values.
Comments
Post a Comment