|
Hello everyone,
I think the value_type of vector<int> should be int and the value_type of vector<int> should be int*. But I am not 100% sure,
1. how to write a program to verify this idea;
2. where to find the definition that the value_type of interator of vector<int> is int*.
It is appreciated if you could help.
<br />
#include <vector><br />
<br />
using namespace std;<br />
<br />
int main (int argc, char** argv)<br />
{<br />
vector<int>::value_type;
vector<int>::iterator::value_type;
<br />
return 0;<br />
}<br />
thanks in advance,
George
|
|
|
|
|
Firstly we can't see the “<” and “>” characters in your post or what’s between them – this information is vital if you expect an answer to your post. Do you review your posts?
I assume you mean the following:
#include <vector>
using namespace std;
int main (int argc, char** argv)
{
vector<int>::value_type;
vector<int>::iterator::value_type;
return 0;
}
The line vector<int>::iterator::value_type is incorrect and might result in compiler errors (depending on the particular STL implementation you’re using.) The correct way to get type information is as follows:
#include <vector>
#include <iterator>
iterator_traits<vector<int>::iterator>::value_type
The reason for using external adaptation via the iterator_traits class is simple: it allows the use of types such as int* to be used as iterators (since int* s are not classes and so can’t expose a value_type directly.) Also note that the crap-fest STL that comes with MSVC6 will fail to compile the code I gave because it’s missing the required iterator_traits specializations.
Also note that you can not assume that an iterator is a pointer: it may or may not be depending on many factors, among them the whims of the implementors (of the STL being used.)
Steve
|
|
|
|
|
Thanks Steve!
I have also referred some links, like this one in sgi implementation,
http://www.sgi.com/tech/stl/iterator_traits.html[^]
Currently, I am using Visual Studio 2005 and using other implementation to illustrate is also fine. Yes, you are correct, I mean vector with greater than and less than signs.
From your reply, I do not understand why from this statement,
iterator_traits<vector<int>::iterator>::value_type
if the type of vector is T or int (i.e. vector <t> or vector <int>), the value_type iterator is also defined to T or int? How it is implemented? For example, from either sgi implementation or Visual Stuido 2005 implementation is fine.
regards,
George
|
|
|
|
|
In <iterator> (or some implementation defined file included by it) you'll find a template something like this:
template <class Iterator>
struct iterator_traits
{
typedef typename Iterator::iterator_category iterator_category;
typedef typename Iterator::value_type value_type;
typedef typename Iterator::difference_type difference_type;
typedef typename Iterator::pointer pointer;
typedef typename Iterator::reference reference;
};
This simply forwards the requests to the iterator class. The following partial specialization allows would allow pointers to be used as iterators (note that MSVC6 can’t handle partial template specialization):
template <class T>
struct iterator_traits<T*>
{
typedef random_access_iterator_tag iterator_category;
typedef T value_type;
typedef ptrdiff_t difference_type;
typedef T* pointer;
typedef T& reference;
};
Note that no forwarding is used here: the types are defined in-place.
Steve
|
|
|
|
|
Thanks Steve,
I have read through the above codes, but I am confused that when the statement as you mentioned,
<code>
iterator_traits<vector<int>::iterator>::value_type
</code>
whether
<code>
template <class Iterator>struct iterator_traits
</code>
or
<code>
template <class T>struct iterator_traits<T*>
</code>
is invoked?
regards,
George
|
|
|
|
|
|
Thanks Steve,
My question is answered.
regards,
George
|
|
|
|
|
My project contains client application and server application. Always using server to control the client side. A Dialog at client side using a CFileDialog to open a image file. the problem is, after the server side close client side dialog, but the CFileDialog remains on screen.
We tried lots of way to close CFileDialog, but failed.
like EndDialog(), EndModalLoop(IDCANCEL) EndModalLoop(IDOK), and PostMessage(WM_KEYDOWN,VK_ESCAPE, 0)
So....what can I try next?
--
I create a demo to show this problem. Dialog A calls Dialog B, and Dialog B calls a CFileDialog, then add timer event in Dialog A to Destroy Dialog B. the CFileDialog was closed too.
Does this demo wrong to reproduce this problem?
|
|
|
|
|
You have probably not set the parent window of the CFileDialog.
|
|
|
|
|
Thanks for your reply. I tried set fFileDlg.m_pOFN->hwndOwner = this->GetParent()->m_hwnd , but it's doesn't work.
-- WuJunyin
|
|
|
|
|
Can you show me the code fragment regarding this?
|
|
|
|
|
<br />
CString strFilter = "..."; <br />
CFileDialog fFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,NULL);<br />
fFileDlg.m_pOFN->hwndOwner = this->GetParent()->m_hwnd;<br />
<br />
if (fFileDlg.DoModal() == IDOK)<br />
{<br />
...<br />
}<br />
|
|
|
|
|
Try like this...
CFileDialog fFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
//fFileDlg.m_pOFN->hwndOwner = this->GetParent()->m_hwnd;
if (fFileDlg.DoModal() == IDOK)
|
|
|
|
|
I have tried it before I post this message.
|
|
|
|
|
Are you sure that the file dialog is coming as modal? Means can you switch the focus to the main dialog when the file dialog is open?
|
|
|
|
|
I'm sure it's coming as modal, and i cannot switch after the filedialog appeared.
------ WuJunyin
|
|
|
|
|
How is the main window is closed, by the server? Can you please show me the relevant codes?
|
|
|
|
|
Thank you for your help.
This bug has been fixed.
|
|
|
|
|
Could you please tell me what the problem was?
|
|
|
|
|
The point is CFileDialog cannot find its parentswindow.
At first, we close CFileDialog directly.
But this time, when the server side closes application, the client side let CFileDialog finds its parents first, then shut down its parentswindow. The CFileDialog is closed at the time of its parentswindow closed.
|
|
|
|
|
WuJunyin wrote: A Dialog at client side using a CFileDialog to open a image file. the problem is, after the server side close client side dialog, but the CFileDialog remains on screen.
Such a problem can occur only if the file open dialog is not the child of the Dialog. This may happen if you are showing the dialog from a separate thread. try setting the m_ofn.hwndOwner of the CFileDialog with the handle of your dialog.
CFileDialog dlg(1);<br />
dlg.m_ofn.hwndOwner = m_hWnd;
dlg.DoModal()
Its only a guess. just try.
|
|
|
|
|
Thanks for your reply.
It's doesn't work.
-- WuJunyin
|
|
|
|
|
Hello all,
I am being driven crazy by the following stupid run-time error, and I would appreciate very much if someone could help me resolve it. Particulatly, I have the following code:
1: CMimeMessage msg;
2: msg.AddRecipient(_T("to@yahoo.com"));
3: msg.SetSender(_T("from@yahoo.com"));
4: msg.SetSubject(_T("Greetings"));
First three lines of code work perfect. But when I try to execute the 4th one, I get a runtime error, and when I click to retry, I am redirected to following piece of code in file: atlspriv.h.
inline BOOL AtlMimeConvertStringW(
__in IMultiLanguage *pMultiLanguage,
__in UINT uiCodePage,
__in LPCWSTR wszIn,
__out_ecount_part_z(*pnLen, *pnLen) LPSTR *ppszOut,
__inout UINT *pnLen) throw()
{
ATLENSURE( pMultiLanguage != NULL );
ATLENSURE( wszIn != NULL );
...
Has anybody any idea what can be wrong here ? The funny thing is that, all methods in previous code require same parameter, i.e. LPCTSTR, so why should one fail, when another doesnt ?
I dont know, I am confused
I would appreciate any hints, or whatever..
PS. I googled and found out that someone, fixed the problem by using ::CoInitialize(NULL) call, but I cant us it, as it is obsolete in VS2005. ( http://www.tech-archive.net/Archive/VC/microsoft.public.vc.atl/2007-02/msg00055.html )
|
|
|
|
|
stack overwrite?
What happens in the debugger?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />
Peter Weyzen<br />
Staff Engineer<br />
<A HREF="http://www.soonr.com">SoonR Inc -- PC Power delivered to your phone</A>
|
|
|
|
|
ATLENSURE( pMultiLanguage != NULL ); // THIS ASSERTION IS THE ONE THAT FAILS !!!
|
|
|
|