Hi everyone,

Please bear with me this is my first post here at daniweb. I usually develop in C or assembly for embedded systems, but occasionally I have need to develop a PC application using C/C++ and have relied on Visual Studio C++ 6.0.

Unfortunately I recently purchased a laptop with Vista, so VSC++ 6 is a no go. I was left with the choice of down grading to XP, or upgrade to Visual studio enterprise.

I like vista so I choose the second path, and I like the new look. The problem I have is that enterprise converts the VSC++ 6 projects to enterprise, but then the code fails to build!!

The warnings I expected, because I use mostly win32 libraries which are supported, but not encouraged, however I now have errors in code that compiled in VSC++ 6.

Peter

Very strange. I use the 'conversion thing' quite often and never had problems with it. (from 6.0 to 2005 and from 6.0 to 2008)

Could you post a few errors?

>have relied on Visual Studio C++ 6.0
I'm sorry. I once relied on Visual Studio 6.0 too, and I'm thankful that there are better versions now.

>but then the code fails to build!!
What a shocker. Speaking of compatibility, did you know that my old installation of Visual Studio 6.0 made extensive use of custom preprocessors and my own complete version of the standard C and C++ libraries so that it would conform to the standards?

>I now have errors in code that compiled in VSC++ 6.
That's to be expected, but I can't really help if you don't tell us what the errors are, or point out the code that caused them.

One very common problem I had with porting from 6.0 was the use of loop counters, for example:

for(int i = 0; i < something; i++)
   // do something

if( i == 0 ) // ok on VC++ 6.0 but not in C++ standards or VC++ 2005/8/9

MFC has a ton of incompatabilities because may of its classes were converted to use templates.

How to correct: Take the errors one as a time and make them conform to the requirements of your current compiler and c++ standard. There is no quick fix -- just fix them one at a time.

Sorry wasn't thinking

Here is the error statement

": error C2679: binary '!=' : no operator found which takes a right-hand operand of type 'std::_Vector_iterator<_Ty,_Alloc>' (or there is no acceptable conversion)"

and the code segment it refers to

unsigned char MemoryBlock::operator [] (unsigned int address)
{
	for (MemorySlice *i = begin(); i != end(); i++)
		if (i->in(address))
			return (*i)[address];

	return emptyFillM;
}

As a sanity check I just compiled the code on my desktop, without errors, and then copied the same project to the laptop and it generated the above error.

Peter

MemorySlice is a string item in a linked list

begin returns an iterator addressing the first element in the string,

while end returns an iterator that addresses the location succeeding the last element in a string.

The application reads an intel formatted file, each line is decoded and written to a memory slice. All the memory slices constitute a block of memory representing the virtual address space of an embedded processor.

I think my problem stems from the standard template used for basic_string which forms the basis for the MemorySlice class.

Don't you need an iterator for that loop

string MemorySlice;
    for( string::iterator i = MemorySlice.begin(); i != MemorySlice.end(); i++)
    {

No an iterator doesn't help, but it does give me an idea the definition for a string template must have changed in the many revisions to the C++ compiler. I need to analyze the structure and relationships of the Memory Slice object.

I'll try to get my conclusions out by next week

Thanks for the ideas

Peter

This article has been dead for over six months. Start a new discussion instead.