|
Why are you mixing MFC collections with STL ones?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Is it a serious issue(mixing MFC with STL)? please explain.
|
|
|
|
|
It's not FATAL - but the two mindsets of the framework designers are quite different.
So you're setting yourself up for confusion. Which is never good. I find it confusing enough just getting out of bed.
Iain.
modified on Friday, December 19, 2008 10:07 AM
|
|
|
|
|
Iain Clarke wrote: It's not FATAL - but the two mindsets of the framework designers are quite different.
Also the quality of the two mindsets is quite different (as usual this is going on my arrogant...)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
The problem is still not solved.
I have some classes that inherit from vectors.
I have a vector of POSITION(in afx.h)
struct __POSITION {};
typedef __POSITION* POSITION;
So when I try to push a POSITION value to the vector<position>
I get this crash saying invalid parameter.
In call stack I see its trying to push(insert) a value of different type (ref. classes that inherit from vectors) other than POSITION. How is this possible?
Please help!!!
|
|
|
|
|
Nope, if you're able to master both. Anyway, if you're able to master both then you don't mix them.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
ThisIsMeRon wrote: Desktop.exe!_invalid_parameter_noinfo() Line 125 + 0xc bytes C++
Looks like a CRT invalid argument error. You can use _set_invalid_parameter_handler[^] to set a custom handler for whatever invalid argument is being passed. Note that not correctly handling the error could mask the real problem.
Best Wishes,
-David Delaune
|
|
|
|
|
I had the same problem when porting from VS2005 to VS2008.
I avoided it using dynamic allocation something like this:
std::vector<???> *v;
v = new ???;
v->push_back(***)
This works in both debug and release mode ^^
|
|
|
|
|
hi all,
I m using a ListCtrl,here diffrent rows and column are present.
for example there is 10 row and 4 column.
i want a RECT value for corresponding row and column.
i m using this.
CRect CDemo::GetCellRect(int nRow, int nCol)
{
ASSERT(nCol >= 0 && nCol < m_nPageCols);
ASSERT(nRow >= 0 && nRow < m_nRowCount);
CSize charSize = m_CharSizeBody;
CRect rectBody = m_rectBody;
CRect rectCol = GetColumnRect(0);
for (int nLeft=0, i=0; i < nCol; i++)
nLeft += GetColumnWidth(m_nColumns[i]);
int nRight = nLeft + GetColumnWidth(m_nColumns[i]);
int nPageRow = nRow % m_nPageRows;
ASSERT(nPageRow <= m_nPageRows);
CRect rect(
rectBody.left + nLeft,
rectBody.top + rectCol.Height() + charSize.cy * nPageRow,
rectBody.left + nRight,
rectBody.top + rectCol.Height() + charSize.cy * (nPageRow + 1));
if (rect.right > rectBody.right)
rect.right = rectBody.right;
rect.left += (int)(CELL_PADDING * m_RatioX);
return rect;
}
but this gives some wrong values.
for all columns in one row its gives same value and put data in 1st column.
i want to put data in corresponding row and columns.
please correct me.
thanks in advance.
IN A DAY, WHEN YOU DON'T COME ACROSS ANY PROBLEMS - YOU CAN BE SURE THAT YOU ARE TRAVELLING IN A WRONG PATH
|
|
|
|
|
|
Why dont' you use GetItemRect and GetSubItemRect ?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hi all,
What is wrong in this problem. Is this the right way to handle?
#include <iostream.h>
class MyErrorClass
{
char *reason;
int *i;
public:
MyErrorClass(char *r)
{
i = new int[6];
cout<<;"Constructor<<endl;
reason = r;
cout<<reason<<<endl;
}
char* giveReason()
{
return reason;
}
~MyErrorClass()
{
cout<<"destructor"<<endl;
delete[] i;
}
};
void main()
{
try
{
throw MyErrorClass("error");
}
catch (MyErrorClass &e)
{
cout<<"Exception caught --- <<e.giveReason()<<endl;
}
}
Thanks
San
|
|
|
|
|
I hope you got a crash when you run this code snippet. I rewrote it like this. It allocates the MyErrorClass then throw it. On the top level function, you can delete it. Check the code snippet.
void main()
{
try
{
throw new MyErrorClass("error");
}
catch (MyErrorClass* e)
{
cout<<"Exception caught --- "<<e->giveReason()<<endl;
delete e;
}
}
[Added] As pointed out by Stuart, it will be better to catch the exception object by reference itself. But here the problem is your MyErrorClass is not well written to handle its allocation which can cause crashes(I had). Hope you've already went thought Stuart's explanations.
Regards,
Jijo.
_____________________________________________________
http://weseetips.com[ ^] Visual C++ tips and tricks. Updated daily.
modified on Friday, December 19, 2008 9:46 AM
|
|
|
|
|
Ummm - no. You definitely should not get a crash when you throw an exception object (as opposed to an exception pointer). The exception declaration does not define the lifetime of the exception - the runtime copies it (or something like that, anyway).
Try the following - you'll find it doesn't crash...
#include <stdexcept>
#include <iostream>
int main(int, char**)
{
try
{
throw std::runtime_error("Test");
}
catch(std::exception& e)
{
std::cerr << "Caught exception - " << e.what() << std::endl;
};
}
|
|
|
|
|
Well Stuart, try with this code snippet. Its the same code snippet provided by Ron. I made it compilable. I'll be surprised if it didn't crashed in your system.
class MyErrorClass
{
char *reason;
int *i;
public:
MyErrorClass(char *r)
{
i = new int[6];
cout<<"Constructor"<<endl;
reason = r;
cout<<reason<<endl;
}
char* giveReason()
{
return reason;
}
~MyErrorClass()
{
cout<<"destructor"<<endl;
delete[] i;
}
};
void main()
{
try
{
throw MyErrorClass("error");
}
catch (MyErrorClass* e)
{
cout<<"Exception caught --- "<<e->giveReason()<<endl;
}
}
Regards,
Jijo.
_____________________________________________________
http://weseetips.com[ ^] Visual C++ tips and tricks. Updated daily.
|
|
|
|
|
Yes, this code will crash - because you're throwing an object of type MyErrorClass and trying to catch a pointer to an object of type MyErrorClass .
With the original code, which has this line, catching an object (well, reference to an object) of type MyErrorClass
catch (MyErrorClass &e)
the code compiles, links and runs as expected.
Did you try it? I did.
|
|
|
|
|
Ah! Sorry, i did send you the wrong code. I forgot to rollback the changes made to the old code. I really meant - catch (MyErrorClass &e) will also crash. I'm posting the code snippet once again. Well, I'm using Visual Studio 6.0. Which one you're using? Well, the reason for crash is due to the fact that MyErrorClass::i is being de-allocated twice, since the copy constructor is not written for deep copy.
class MyErrorClass
{
char *reason;
int *i;
public:
MyErrorClass(char *r)
{
i = new int[6];
cout<<"Constructor"<<endl;
reason = r;
cout<<reason<<endl;
}
char* giveReason()
{
return reason;
}
~MyErrorClass()
{
cout<<"destructor"<<endl;
delete[] i;
}
};
void main()
{
try
{
throw MyErrorClass("error");
}
catch (MyErrorClass& e)
{
cout<<"Exception caught --- "<<e.giveReason()<<endl;
}
}
Regards,
Jijo.
_____________________________________________________
http://weseetips.com[ ^] Visual C++ tips and tricks. Updated daily.
|
|
|
|
|
Jijo raj wrote: Well, the reason for crash is due to the fact that MyErrorClass::i is being de-allocated twice, since the copy constructor is not written for deep copy
You're quite correct - I didn't get a crash because I compiled with a non-debug runtime library. Even so, I'd still recommend throwing objects, not pointers - the real solution is for the OP to write a better exception class, I think.
Jijo raj wrote: I'm using Visual Studio 6.0. Which one you're using?
2003, 2005 and 2008 - certainly not VC6!!! The reason I don't use VC6 is because it is so primitive in terms of C++ language support.
|
|
|
|
|
Stuart Dootson wrote: Even so, I'd still recommend throwing objects, not pointers - the real solution is for the OP to write a better exception class, I think.
You're right. Indeed, i did forget about C++ morels when i saw the crash.
Stuart Dootson wrote: 2003, 2005 and 2008 - certainly not VC6!!! The reason I don't use VC6 is because it is so primitive in terms of C++ language support.
Yep. That's right. But still my favorite due to the excellent fast IDE. Well, i'm waiting for VC10 which is supposed to be the new 6.
Regards,
Jijo.
_____________________________________________________
http://weseetips.com[ ^] Visual C++ tips and tricks. Updated daily.
|
|
|
|
|
Jijo raj wrote: still my favorite due to the excellent fast IDE
VS2003 and VS2005 are fast when you give them a 2.4GHz Core 2 Duo and 4GB of RAM to play with VS2008...I'm not so fond of, the debugger especially seems sluggish.
Jijo raj wrote: Well, i'm waiting for VC10 which is supposed to be the new 6.
It's not (IMO) - I've used the CTP, and it's a really an evolution of VS2008 - it did seem a bit quicker, though. And the compiler has C++0x features, like lambdas and type inferencing, which are uber-cool
|
|
|
|
|
Looks fine to me, aside from some formatting errors that cause compile-time errors.
Ignore the comments telling you to throw pointers to exception objects - throw the exception objects directly.
You may also want to derive from std::exception or std::runtime_error , to leverage the standard C++ exception classes?
Here's a minimal example of throwing exceptions with standard C++ exception classes:
#include <stdexcept>
#include <iostream>
int main(int, char**)
{
try
{
throw std::runtime_error("Test");
}
catch(std::exception& e)
{
std::cerr << "Caught exception - " << e.what() << std::endl;
};
}
modified on Friday, December 19, 2008 8:35 AM
|
|
|
|
|
As Jijo says, you get a crash (if you're using the right runtime) because your exception object isn't written in such a way that it can be copied correctly.
I would suggest changing i to be a std::vector<int> and reason to be a std::string , because these can be copied successfully (unlike raw pointers to dynamically allocated memory). You also don't need to bother delete ing them.
|
|
|
|
|
Hello everebody.
I have two ScrollViews placed in a separate SplitterWnds - FirstView and SecondView. I need to sync vertical scrolling between these two views - when I scroll FirstView vertically, I need SecondView to be scrolled vertically by the same amount. Vertical sizes of the views (SetScrollSizes) are the same. So, I override OnScroll function in FirstView and retransmitt all the data from one view to another. If both of views have horizontal scroll bar - everything works just fine (LINEUP/LINEDOWN, PAGEUP/PAGEDOWN, MOUSEWHEEL). But I have a problem when FirstView hides horizontal scroll bar - SecondView scrolls up/down more than first by height of the horizontal scroll bar, and this is right, because it has horizontal scroll bar. But I do not want it to do it "right"
The solution is to prevent horizontal scroll bar in FirstView from hiding, I think. But I do not know where and how to do it in a scroll view. Or, maybe the solution is ...
Thank you for answering ...
|
|
|
|
|
Hi All,
Actually I am looking for the free continues of NTFS file system.
How could I do that?
Is this possible with FSCTL_GET_VOLUME_BITMAP with DeviceIoControl?
If yes please help me to achieve this.
Thanks in Advance...
|
|
|
|
|
MPTP wrote: Actually I am looking for the free continues of NTFS file system.
Do you mean free clusters?
Regards,
Jijo.
_____________________________________________________
http://weseetips.com[ ^] Visual C++ tips and tricks. Updated daily.
|
|
|
|