Difference between revisions of "BTP300B A2 Team 1 Bugs Report"
Line 106: | Line 106: | ||
Oct 19, Worked on it today and got the draw function up and running as well as fixed setLine since it seems I did it incorrectly and finally got it compiling and running properly in VS. For some reason though, absrow and abscol is causing a crash in VS but otherwise works fine in Borland (haven't had a chance to test it out in g++). added some code to A2test for testing the stuff I've coded. | Oct 19, Worked on it today and got the draw function up and running as well as fixed setLine since it seems I did it incorrectly and finally got it compiling and running properly in VS. For some reason though, absrow and abscol is causing a crash in VS but otherwise works fine in Borland (haven't had a chance to test it out in g++). added some code to A2test for testing the stuff I've coded. | ||
+ | |||
+ | Oct 21, Got started on display method. The abscol and absrow crash seems to only occur on the default A2test code not on my own personal test code which only creates 1 frame. The default A2test code create a nested frame (a small frame inside a larger frame) so maybe the problem lies in how VS is handling those nested frames? | ||
+ | |||
+ | Oct 21, Got the display method up and running. I added in the helper method void move(iFrame&) which handles getting the user input and moving the frame based on that input (user presses up key, it calls the move(CDirection method) which moves the frame in the appropriate direction). I'm having a bit of trouble with it though, in a2test the parameter is passed a CFrame but the method itself (both the definition in iFrame and the CFrame helper method) are set to recieve iFrames. The method move(iFrame& x) should be able to recieve a CFrame since a CFrame is an iFrame and in a2test the calls to move method are all being passed CFrames. Figuring out how to fix this. | ||
+ | |||
+ | Oct 22, I've sent an email to Peter asking for help about the issue with the | ||
+ | |||
+ | error: invalid initialization of reference of type cio::iFrame& from expression of type cio::CFrame | ||
+ | |||
+ | when calling the helper method void move(iFrame &x) which handles getting user input on the direction the user wants the frame to move. Currently working on move(CDirection) method which handles moving the actual frame. | ||
+ | |||
+ | Just finished with the move(CDirection) and the frame now moves around inside either the console (I still need to test if it will do the same if it is a child frame inside a parent frame though it should.). I also added a new char* string called contentBuffer which will hold the information held in display and edit when the user moves the frame and it has to be redrawn. | ||
+ | |||
+ | Oct 23, Need to figure out what is causing the move(iFrame&) method to not accept the CFrame classes being passed to it since that will be handling getting the user input and calling the move(CDirection) method which will actually move the frame. It technically should be accepting receiving a CFrame object since a CFrame is an implementation of the iFrame interface. For instance in a2test.cpp, the method testFrame() creates a CFrame object then calls move(iFrame&) method but it results in the following error: | ||
+ | |||
+ | error: invalid initialization of reference of type cio::iFrame& from expression of type cio::CFrame | ||
+ | |||
+ | I haven't heard from Peter yet and I've been pretty stumped with it since yesterday. | ||
+ | |||
+ | If you could take a look at that in the assignment that would help alot. Right now move(iFrame&) is declared in CFrame.h and implemented in CFrame.cpp (although it is empty since no functionality is coded for it right now). | ||
+ | |||
+ | |||
+ | void testFrame() { | ||
+ | bool done = false; | ||
+ | CFrame frame; | ||
+ | CFrame outer(5, 10, 50, 15, true, "+-+|+-+|", &frame); | ||
+ | CFrame inner(5, 10, 20, 5, true, C_BORDER_CHARS, &outer); | ||
+ | |||
+ | outer.draw(); | ||
+ | inner.draw(); | ||
+ | console.setPosition(0, 0); | ||
+ | console << "Press any key..."; | ||
+ | console.pause(); | ||
+ | |||
+ | do { | ||
+ | int key; | ||
+ | console.setPosition(0, 0); | ||
+ | console << "ESC: exit, F6: Move Container, F7: Move Inner border"; | ||
+ | console >> key; | ||
+ | switch(key) { | ||
+ | case ESCAPE: | ||
+ | done = true; | ||
+ | break; | ||
+ | case F(6): | ||
+ | move(outer); //<--------- this should be accepting the CFrame object but is not for some reason. Also note, I've got this commented out right now in | ||
+ | a2_v9.zip. Just uncomment it and try to compile the code. | ||
+ | inner.draw(); | ||
+ | break; | ||
+ | case F(7): | ||
+ | // move(inner); | ||
+ | break; | ||
+ | } | ||
+ | } while(!done); | ||
+ | |||
+ | outer.hide(); | ||
+ | inner.hide(); | ||
+ | console.clear(); | ||
+ | } | ||
+ | |||
+ | Oct 29, I don't think there's much that's left to do, just handle getting the user input to move the frame around and fix any bugs that causes it to fail any of the a2test tests. | ||
+ | |||
+ | Nov 1, goofed up. Realized I forgot to pass on the SVN accounts to the rest of the team. Team kept each other up to date with the latest developments via email chains so not using the SVN really did not impact progress of the project that much. | ||
+ | |||
+ | Nov 2, I'm still trying to figure out why the move method isn't working properly in the a2test. I used my own code that I added to the a2testfile and the move method works perfectly but for some reason in the actual a2test code it moves once and then just stops. I suspect that maybe we've commented out code that we should not have commented out. I think I've figured out the problem, the error occurs when the frame being moved has a parent frame, so we should probably take a look at how the parent frames are handled by the program and by the move method in particular. | ||
+ | |||
+ | works fine like this: | ||
+ | CFrame myFrameParent(2, 2, 40, 10, true, "$-%|*+@-", NULL); | ||
+ | |||
+ | but the bug arises when move is called on a frame with a parent frame. | ||
+ | |||
+ | CFrame myFrame(); | ||
+ | CFrame myFrameParent(2, 2, 40, 10, true, "$-%|*+@-", &myFrame); | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
Revision as of 19:58, 4 December 2013
Huda's Bug Log
========================
- Oct 7 - Received Dennis' copy of the assignment which he implemented the basic idea of the CFrame class. Compiling with a2test.cpp gives significant amount of errors related to namespace issue even though its in both .cpp file and .h files for CFrame class and also getting other errors. However, tried to fix the following:
Error #1:
In file included from iframe.h:11:0, from consoleplus.h:10, from consolelineedit.cpp:9: cfg.h:8:0: warning: "NULL" redefined [enabled by default] /usr/lib/gcc/i586-suse-linux/4.6/include/stddef.h:399:0: note: this is the location of the previous definition
FIX:
#ifndef NULL #define NULL (void*)0 // - the NULL address if it has not been defined ((void*)0) #endif
Error #2:
In file included from CFrame.cpp:3:0: consoleplus.h:23:42: error: âCDirectionâ has not been declared In file included from consolebackup.cpp:11:0: consoleplus.h:23:42: error: âCDirectionâ has not been declared In file included from consolelineedit.cpp:9:0: consoleplus.h:23:42: error: âCDirectionâ has not been declared
FIX:
Added using namespace cio{ } in both consolelineedit.cpp file, consoleplus.h file
Error #3:
/tmp/ccuqzVeu.o: In function `testFrame()': a2test.cpp:(.text+0x115): undefined reference to `cio::CFrame::draw(int)' a2test.cpp:(.text+0x128): undefined reference to `cio::CFrame::draw(int)' a2test.cpp:(.text+0x1d6): undefined reference to `cio::CFrame::draw(int)' a2test.cpp:(.text+0x221): undefined reference to `cio::CFrame::~CFrame()' a2test.cpp:(.text+0x22c): undefined reference to `cio::CFrame::~CFrame()' a2test.cpp:(.text+0x237): undefined reference to `cio::CFrame::~CFrame()' a2test.cpp:(.text+0x24d): undefined reference to `cio::CFrame::~CFrame()' a2test.cpp:(.text+0x25c): undefined reference to `cio::CFrame::~CFrame()' /tmp/ccuqzVeu.o:a2test.cpp:(.text+0x26b): more undefined references to `cio::CFrame::~CFrame()' follow collect2: ld returned 1 exit status
Before the Fix:
void draw(int fn = C_FULL_FRAME) {}
and we had a "normal" destructor :
~CFrame();
Fix for Error #3:
1. Changed draw from normal function to a virtual function
void CFrame::draw(int fn ) {}
2. added empty destructor definition
- Sent the clean version of assignment back to the team (but compiles with errors on VS).
- Oct 19 - Received another revised version of assignment from Dennis.
- Oct 26 - we were literally stuck and were encountering an error which Shianne fixed, but was still failing with errors on Linux. I looked into the error which was
g++ CFrame.cpp a2test.cpp console.cpp consolebackup.cpp consolelineedit.cpp -lncurses
a2test.cpp: In function âint main()â:
a2test.cpp:78:73: warning: deprecated conversion from string constant to âchar*â [-Wwrite-strings]
/tmp/ccTRS5S7.o: In function `testFrame()':
a2test.cpp:(.text+0x3f1): undefined reference to `cio::move(cio::iFrame&)'
collect2: ld returned 1 exit status
Because of the following code
void move(cio::CFrame& x);
The fix was easy (but hard to find at first). This was the fix:
void move(cio::iFrame& x);
Dennis's Bug Log
========================
Oct 7, created the basic skeleton of the CFrame class though I'm not sure if I did it properly. Basically just created the CFrame.cpp with the get/set methods (row, row(int), etc...) coded, the more complex methods implemented but not working and the attributes of the frame class defined. Getting major compile errors on VS and G++ but seemed to be compiling in Borland. Split the work between myself, Shianne and Huda (Huda emailed the team letting us know that she wishes to work on display and hide method).
Oct 10, Goofed up and realized that I had not added the private methods to CFrame. Added those in (implemented but functionality not coded).
Oct 15, program compiles in Borland but not in VS. Got started on private member functions of CFrame. Finished working on the setLine method and started work on void capture();
Oct 18, I've worked a bit on it and I've gotten a couple of the private methods running (capture and setline) which from the looks of it should enable us to begin coding the hide and draw methods that will hide and draw the frame. Huda has stated that she wants to do hide and I think I can do the draw method. We still need to get the private methods absrow and abscol which returns the position of the frame relative to the console which we will need in order to implement the move method as well as a whole bunch of the smaller methods like overloaded display and edit methods which will let the user edit the contents of a frame.
Oct 19, Worked on it today and got the draw function up and running as well as fixed setLine since it seems I did it incorrectly and finally got it compiling and running properly in VS. For some reason though, absrow and abscol is causing a crash in VS but otherwise works fine in Borland (haven't had a chance to test it out in g++). added some code to A2test for testing the stuff I've coded.
Oct 21, Got started on display method. The abscol and absrow crash seems to only occur on the default A2test code not on my own personal test code which only creates 1 frame. The default A2test code create a nested frame (a small frame inside a larger frame) so maybe the problem lies in how VS is handling those nested frames?
Oct 21, Got the display method up and running. I added in the helper method void move(iFrame&) which handles getting the user input and moving the frame based on that input (user presses up key, it calls the move(CDirection method) which moves the frame in the appropriate direction). I'm having a bit of trouble with it though, in a2test the parameter is passed a CFrame but the method itself (both the definition in iFrame and the CFrame helper method) are set to recieve iFrames. The method move(iFrame& x) should be able to recieve a CFrame since a CFrame is an iFrame and in a2test the calls to move method are all being passed CFrames. Figuring out how to fix this.
Oct 22, I've sent an email to Peter asking for help about the issue with the
error: invalid initialization of reference of type cio::iFrame& from expression of type cio::CFrame
when calling the helper method void move(iFrame &x) which handles getting user input on the direction the user wants the frame to move. Currently working on move(CDirection) method which handles moving the actual frame.
Just finished with the move(CDirection) and the frame now moves around inside either the console (I still need to test if it will do the same if it is a child frame inside a parent frame though it should.). I also added a new char* string called contentBuffer which will hold the information held in display and edit when the user moves the frame and it has to be redrawn.
Oct 23, Need to figure out what is causing the move(iFrame&) method to not accept the CFrame classes being passed to it since that will be handling getting the user input and calling the move(CDirection) method which will actually move the frame. It technically should be accepting receiving a CFrame object since a CFrame is an implementation of the iFrame interface. For instance in a2test.cpp, the method testFrame() creates a CFrame object then calls move(iFrame&) method but it results in the following error:
error: invalid initialization of reference of type cio::iFrame& from expression of type cio::CFrame
I haven't heard from Peter yet and I've been pretty stumped with it since yesterday.
If you could take a look at that in the assignment that would help alot. Right now move(iFrame&) is declared in CFrame.h and implemented in CFrame.cpp (although it is empty since no functionality is coded for it right now).
void testFrame() {
bool done = false; CFrame frame; CFrame outer(5, 10, 50, 15, true, "+-+|+-+|", &frame); CFrame inner(5, 10, 20, 5, true, C_BORDER_CHARS, &outer);
outer.draw(); inner.draw(); console.setPosition(0, 0); console << "Press any key..."; console.pause();
do { int key; console.setPosition(0, 0); console << "ESC: exit, F6: Move Container, F7: Move Inner border"; console >> key; switch(key) { case ESCAPE: done = true; break; case F(6): move(outer); //<--------- this should be accepting the CFrame object but is not for some reason. Also note, I've got this commented out right now in a2_v9.zip. Just uncomment it and try to compile the code. inner.draw(); break; case F(7): // move(inner); break; } } while(!done);
outer.hide(); inner.hide(); console.clear();
}
Oct 29, I don't think there's much that's left to do, just handle getting the user input to move the frame around and fix any bugs that causes it to fail any of the a2test tests.
Nov 1, goofed up. Realized I forgot to pass on the SVN accounts to the rest of the team. Team kept each other up to date with the latest developments via email chains so not using the SVN really did not impact progress of the project that much.
Nov 2, I'm still trying to figure out why the move method isn't working properly in the a2test. I used my own code that I added to the a2testfile and the move method works perfectly but for some reason in the actual a2test code it moves once and then just stops. I suspect that maybe we've commented out code that we should not have commented out. I think I've figured out the problem, the error occurs when the frame being moved has a parent frame, so we should probably take a look at how the parent frames are handled by the program and by the move method in particular.
works fine like this:
CFrame myFrameParent(2, 2, 40, 10, true, "$-%|*+@-", NULL);
but the bug arises when move is called on a frame with a parent frame.
CFrame myFrame(); CFrame myFrameParent(2, 2, 40, 10, true, "$-%|*+@-", &myFrame);
Shianne's Bug Log
========================