C++ Container classes question (vectors, lists, etc)

For some really weird reason I am getting 2 errors in my vector.h and list.h header files for the C++ container classes. I am using Borland C++ Builder, but that shouldn't make any difference I don't think.

The errors are both:

"Could not find a match for 'std::max( unsigned int, unsigned int)'."

And point to where vector.h, list.h, etc, call the max function (called as just max with no namespace before it). I think the max function it should be using is in algorith.h, but I'm not sure why I'm getting errors as I changed nothing in any of these files, and it worked alright before. I have also tried "using std::vector", but that doesn't help.

Thanks in advance for any help.
LVL 1
red_sodiumAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

mrwad99Commented:
If you post the offending code it would be useful :)
0
mrwad99Commented:
If you are not stating std::max then you can either fully qualify it or add

using std::max;

Either way, please post code :)
0
red_sodiumAuthor Commented:
void initialize()
    {
        buffer_size =
           max((size_type)1,__RWSTD::__rw_allocation_size((value_type*)0,(size_type)0));
    }


That piece of code is in vector.h (~line 320 ), and it is the only line which gives me those 2 errors. The error does not appear when i only include vector.h, but it appears as soon as i define a vector:

vector<int> vInt;
0
Cloud Class® Course: Amazon Web Services - Basic

Are you thinking about creating an Amazon Web Services account for your business? Not sure where to start? In this course you’ll get an overview of the history of AWS and take a tour of their user interface.

mrwad99Commented:
>> when i only include vector.h

You should not be doing this, you should be stating

#include <vector>

And I would not assume that there is anything wrong with the source code for vector; messing with those can lead to infinite problems.
0
red_sodiumAuthor Commented:
Sorry, meant #include <vector>

I am assuming it is something wrong with my code, but I can't see what could possibly be wrong.
0
mrwad99Commented:
OK.  I intially figured that the problem was when you try and call max(), but it know sounds like you get this "Could not find a match for 'std::max..." when you just declare a vector.  Correct ?

0
red_sodiumAuthor Commented:
Yeah.
0
mrwad99Commented:
Right that is very strange.  If you do not have another compiler paste your entire code here, or if you do try and compile it in that.
0
red_sodiumAuthor Commented:
Sorry, it's too split up to post it all, but here's my includes.h header file:

#ifndef includesH
#define includesH

#include <vcl>
#include <windows>
#include <fstream>
#include <vector>
using std::vector;
#include "d3dx9.h"
#define WIN32_MEAN_AND_LEAN // Cut the fat from windows library

class EngineManager;
class DirectXSetup;

#include "defines.h"
#include "EngineManager.h"
#include "DirectXSetup.h"
//--------------------------------------------------------------------------
#endif


0
mrwad99Commented:
>> #include <windows>

should be #include <windows.h> but I don't think that will make a difference.

I cannot see why you are getting the error you are then, sorry.  Hope someone else can !

Will post again if any ideas crop up.
0
rstaveleyCommented:
Include <algorithm> and you should be sure to get the max template included.
0
mrwad99Commented:
>> Include <algorithm>

hmm, not doing that in VC++ does not mean that I cannot declare a vector, but it may do in Borland.  We shall see...
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
itsmeandnobodyelseCommented:
>>           max((size_type)1,__RWSTD::__rw_allocation_size((value_type*)0,(size_type)0));

That looks like a RoqueWave header of tools.h.

Is there any of the headers that include RoqueWave headers? I know they made a lot of messy defines to run their library with and without STL support. If so, you have a hard job if you couldn't eliminate these headers. You could try by moving

   using namespace std;

below all  includes and put private headers to the top or if  you could identify the wrong header (it uses old max macro) then do this

#ifndef max
#define max(a, b) ((a) < (b))? (b) : (a)

#include "header_file_using_RW"

#undef max
#endif

However these includes _MUST_ be above all STL includes.

Hope, that helps

Regards, Alex
0
rstaveleyCommented:
>> Include <algorithm>
> hmm, not doing that in VC++ does not mean that I cannot declare a vector, but it may do in Borland.  We shall see...

I know it seems daft, but that's where the max template is defined and somehow or other you've not got it in your Borland setup.

I'd be wary of Alex's max macro. It could do unexpected things if the STL headers pass it a parameter with an increment operator.
0
itsmeandnobodyelseCommented:
>> I'd be wary of Alex's max macro. It could do unexpected things if the STL headers pass it a parameter with an increment operator.

That's right. That's why the macro __MUST__ be "#undef"ed before including any STL header.

Regards, Alex
0
rstaveleyCommented:
Like...erm... <vector>??
0
red_sodiumAuthor Commented:
Wow, this is so weird. It now works, without the need for any of these.

Could it be anything to do with my changing the priorities of my include folders, as this is the only thing I can think of which might have changed it...

Hmm, now I'm not sure what to do about the points...
0
rstaveleyCommented:
I expect http:/Miscellaneous/Philosophy_Religion/ has the answer.
0
itsmeandnobodyelseCommented:
>> Could it be anything to do with my changing the priorities of my include folders

That is most likely. If you have a mix between old libraries as RoqueWave tools.h and new(er) one like Borland C++ and STL you should make the newer ones to have higher priority.

Regards, Alex
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Editors IDEs

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.