|
Jay Beckert wrote:
Can't a vector hold CString pointers? Then just pass the pointers from dereferencing the iterator?
Yes, but I did not write the code.
Jay Beckert wrote:
Or you could try the way you have it now, declare a CString str just to hold the string from the vector on each loop passing the pointer till the end.
This is a possiblity that had not occured to me, although it adds a temporary. Thanks.
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
|
|
|
|
|
I assume your vector is declared like this:
typedef std::vector(CString) StringVector;
If this is the case then you will need to take the address of your CString object in order to turn it into a pointer after you dereference the iterator.
for(;it != end; ++it)
{
function(&(*it));
}
By dereferencing the iterator, you are invoking the operator*(), which will return the CString object. Then to get the pointer take the address of the dereferenced iterator (*it) .
|
|
|
|
|
That was my first thought, but I'm trying to convince these people that STL is *nice*, and that is just *ugly*. There's no other way ?
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
|
|
|
|
|
I think that stl nice, you should just convey to the people that the iterator is an object, and in order to get access to the data that it represents, you will need to derefence it.
In the case of the vector<cstring>, if you want a pointer to a CString, you will need to take the address of the object once you have the CString.
If you wanted to do the same thing from a map iterator you would have to do this:
&(it->second)
It looks funny, but it is straight forward, but if you convey what an iterator is for and how it works, I think that people will see that it is nice rather than ugly.
|
|
|
|
|
I got a question for you guys since we're on STL. Let's say with a Map, we have .first , .second. What about third, fourth? Is it possible for a declare a Map as so;
typedef std::map< int, CString, CString, CString > MyMap;
MyMap m_map;
MyMap::iterator it;
it = m_usermap.find(int);
CString str = (*it).third;
Is this possible or would I have to write my own template?
|
|
|
|
|
No, it is not possible. You can have pretty much the same effect, however, by suitably defining the second parameter of your map s, like this:
struct string_triplet
{
std::string first;
std::string second;
std::string third;
};
typedef std::map<int, string_triplet> MyMap;
MyMap m_map;
it = m_usermap.find(i);
CString str = it->second.first;
CString str2 = it->second.second;
CString str3 = it->second.third;
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
do anyone know how to write a copy of a pointer where the copy cant change what the original pointer is pointing to kinda like using call by value or call by constant reference but using pointers. i am having trouble doing this because if i make it constant, I cant change it, i can use reference but because the whole program is implemented with pointers i wont be able to use it. do anyone know how to get around this problem???
ex.
int CComputer::CheckForMove(const CBoard* pBoard, int depth)
but by doing this i cant call most of the function that would change the board because that would give me a syntax error...
i wanted to used CheckForMove(const CBoard& rBoard, int depth)
but i wont be able to use it because my whole program is done using pointers...
anyways, thank you for your help...
|
|
|
|
|
I *believe* the syntax is int * const pConstInt;
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
|
|
|
|
|
yah your right but is there way i can use pointer and not use reference to do my function...
hey, christian thankx for the help
|
|
|
|
|
I don't understand ? If I do this:
int * const pInt = new int;
I can do this with no problems:
*pInt = 5;
because the value is not const. I cannot do this:
pInt = new int;
because the pointer *is*. Isn't that what you wanted ?
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
|
|
|
|
|
ok ill try that... thanks
|
|
|
|
|
In a Win32 Application I loaded RICHED32.DLL using
HINSTANCE ghRichInst = LoadLibrary("RICHED32.DLL");
But when I process WM_DESTOY message and I used folowing code to free the module
if(NULL!=ghRichInst)
{
FreeLibrary((HMODULE)ghRichInst);
ghRichInst = NULL;
}
But windows pops up with a message saying that it has encountered an exception.
Plz help
|
|
|
|
|
Check that the ghRichInst handle has the same value at the FreeLibrary call as it did when it was loaded.
I know it sounds far fetched, but I saw a case recently where a string value (actually a version string loaded from the DLL) overwrote the module handle with the same disastrous results.
We had to open a memory window on the handle (you can get the addr from the watch window) and start F10ing through the code - luckily it happened shortly after the LoadLibrary call.
|
|
|
|
|
The handle value remains the same. I called GetLastError() just before and after calling FreeLibrary(). I got the following messages respectively.
---------------------------
GetLastError
---------------------------
The handle is invalid.
GetLastError
---------------------------
The system cannot find the file specified.
|
|
|
|
|
Have you tried freeing the library after the default implementation of WM_NCDESTROY is called?
MS doesn't even both freeing the library until process exit. To be perfectly honest, there is no reason to free the library unless you just want to be 'good citizen'.
Tim Smith
I know what you're thinking punk, you're thinking did he spell check this document? Well, to tell you the truth I kinda forgot myself in all this excitement. But being this here's CodeProject, the most powerful forums in the world and would blow your head clean off, you've got to ask yourself one question, Do I feel lucky? Well do ya punk?
|
|
|
|
|
I'm compiling a little app that uses the Net*() API functions. For NT/2k/XP, you're supposed to link with Netapi32.lib and include Lm.h, while for Win9x/Me you're supposed to link with Svrapi.lib and include Svrapi.h. Doing both at the same time will cause duplicate linkage and a compile-time error. Is there some sort of macro defined (usage: #ifdef WINNT...) that lets you get around this?
Jon Sagara
What about ?
Sonork ID: 100.9999 jonsagara
|
|
|
|
|
Bah - the point is moot. I don't need to do this after all.
Jon Sagara
What about ?
Sonork ID: 100.9999 jonsagara
|
|
|
|
|
Put the OS specific code in two DLLs [one for 98/ME, the otjher for NT/2K]
Now dynamically load the correct DLL at run time
Nish
It's seven o'clock
On the dot
I'm in my drop top
Cruisin' the streets - Oh yeah
I got a real pretty, pretty little thing that's waiting for me
|
|
|
|
|
Jon Sagara wrote:
Bah - the point is moot. I don't need to do this after all.
Anyway, in your next project you may find #pragma comment(lib, "libname") helpful. Usually you nest this pragma inside #ifdef/#elif/#endif to get different libraries depending on some preprocessor symbol.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
can someone give me an idea how to write an algorithm that takes an array with N elements (some of those element could be duplicated in the array)
and returns a new array with all the elements of the previous array but without dulpicates.
thank you.
|
|
|
|
|
Easy - you need to either use a dynamic array like vector. Otherwise you need to make one pass to do a count of unique items, create a new array of that size, a second pass to add them all ( although I suspect <algorithm> will contain something to do both of these, a pointer is a valid STL iterator ), then delete the old array and return the new.
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
|
|
|
|
|
You might be able to get some ideas from the 'scatter sort' concept, if the range of values in the array is reasonable.
|
|
|
|
|
I used an activeX controle of type RichText to load a template letter and I wanted to modify its content by program. I have some tagged words in the text that I want to replace by the content of variables (names, address, ...).
But as soon that I load the content of this richtext in a CString, I loose the caracteristics of my text (font type, color, bold, ...).
So, how can I modify this text without loosing the controls characters of my text ?
Thanks in advance.
DD
|
|
|
|
|
My company sells a couple of static libraries. These are non-MFC libraries with a large number of C interfaced funtions (they don't export any C++ objects).
I built a release version today and was amazed to see the size of the .LIB has doubled. I can think of nothing that we've added or changed that could account for this - in fact, I removed most of what we've added, as a test, to see where the bloat was coming from; but the size stayed the same (fat).
Even more interesting, an app built against the new library is the same size as the app built against the old library.
Can anyone think of a way to reduce the static .LIB size? At its new size, it's too fat to distribute (I couldn't afford the extra bandwidth!)
-c
Smaller Animals Software, Inc.
You're the icing - on the cake - on the table - at my wake. Modest Mouse
|
|
|
|
|