You may want to consider using std::max from the C++ standard library
instead of defining your own such function.

On Thu, Sep 11, 2008 at 5:03 PM, Robert Douglas <[EMAIL PROTECTED]> wrote:
> Thanks Johnathan.  That was the  problem, and #undef worked like a charm. I
> also had a look at the preprocessor output as Scott suggested and the lines
> had been converted to gobbledygook.
> Rob
>
> On 11-Sep-08, at 4:42 PM, Jonathan Prescott wrote:
>
>> You might want to take a look at the other header files you might be
>> including, including those included by the AppKit or other Apple headers.
>>  MAX is a well-known MACRO definition for providing a max "function" for C
>> (and Objective-C) environments, and, if it is being expanded by the C/C++
>> pre-processor (because the macro is defined in some other header file from
>> the C-domain like stdlib.h or stdio.h, or something to that effect), the
>> resulting C/C++ code is going to be very confusing to the compiler.
>>
>> In C-land, and Objective-C land,  MAX is typically defined as :
>>
>> # define MAX(x,y) ((x) > (y) ? (x) : (y))
>>
>> in one or more of the stdxxx.h header files (or some other header file,
>> it's really all over the place!).  The "MAX(x,y)" is replaced by the
>> expression on the right whenever the MAX(...) is seen, including in your
>> template definition.  Which means the compiler is attempting to compile:
>>
>> template<class T>
>> inline const T& ((const T& a) > (const T& b) ? (const T&a) : (const T&b))
>> (const T& a, const T& b) { ... }
>>
>> which is utter nonsense to the C++ compiler (or Objective-C++ compiler).
>>
>> You might want to 1) rename your MAX template function to "max" or
>> "max_of", or "Max", or something other than MAX all caps; or 2) put
>> something like
>>
>> #if defined(MAX)
>> #  undef MAX
>> #endif
>>
>> before:
>>
>> template<class T>
>> inline const T& MAX(....) { ... }
>>
>> Macro definitions do not follow anything like C++ overloading rules,
>> scoping, etc..  They are simply text substitutions, which is why what
>> actually gets presented to the C++ compiler/Objective-C++ compiler (really,
>> the same animal) is going to be some funny text sequences that do not make
>> sense.
>>
>> Note that the same holds true for MIN.   One should note that  SQR is NOT
>> defined in stdxxx.h, which is why there is not a name collision.
>>
>> Jonathan
>>
>> On Sep 11, 2008, at 6:51 PM, Robert Douglas wrote:
>>
>>> I'm in the same boat.  Is the C++ code handled the same in both? I've
>>> been trying to add some numerical recipes routines to my cocoa app and I'm
>>> stymied by an apparent difference.  The nr3.h header compiles fine if I have
>>> it in a .cpp file, but not when it is in a .mm one.    The  line
>>> template<class T>
>>> inline const T &MAX(const T &a, const T &b)
>>>      {return b > a ? (b) : (a);}
>>>
>>> gives me these compile errors:
>>>
>>> error: expected unqualified-id before '{' token
>>> error: expected `)' before '{' token
>>> error: invalid function declaration
>>> error: expected unqualified-id before ')' token
>>> etc.
>>>
>>> Curiously, some other nearby lines compile fine.  eg.
>>> template<class T>
>>> inline T SQR(const T a) {return a*a;}
>>>
>>> Any suggestions?
>>> Thanks,
>>> Rob
>>>
>>> On 11-Sep-08, at 2:15 PM, Randy Bradley wrote:
>>>
>>>>>
>>>> The ".mm" extension is required for source that contains both C++ and
>>>> Objective-C, thus called Objective-C++.  Not required for pure C++
>>>> source.
>>>>
>>>> A couple ideas:
>>>>
>>>> 1. Be sure to add the C++ source files to your target.  (ie, look for
>>>> the
>>>> checkmark in the target column)
>>>> 2. Any objective-c source that creates C++ declared objects also must
>>>> have
>>>> the ".mm" extension and must include the C++ header files.
>>>>
>>>>>
>>>>>
>>>>> I'm relatively new programming ObjectiveC and Cocoa, and I'm trying to
>>>>> add
>>>>> some C++ code to my existing ObjectiveC/Cocoa code using Xcode 3.1. I
>>>>> have my
>>>>> C++ files in a separate .mm files (as the documentation says to), and
>>>>> my C++
>>>>> headers are in a xxx.h file. When building the code, I keep  getting my
>>>>> C++
>>>>> 'class' and everything associated with it as undefines.
>>>>
>>>> _______________________________________________
>>>>
>>>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>>>>
>>>> Please do not post admin requests or moderator comments to the list.
>>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>>>
>>>> Help/Unsubscribe/Update your Subscription:
>>>> http://lists.apple.com/mailman/options/cocoa-dev/rdouglas%40mac.com
>>>>
>>>> This email sent to [EMAIL PROTECTED]
>>>
>>> _______________________________________________
>>>
>>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>>>
>>> Please do not post admin requests or moderator comments to the list.
>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>>
>>> Help/Unsubscribe/Update your Subscription:
>>>
>>> http://lists.apple.com/mailman/options/cocoa-dev/jprescott12%40comcast.net
>>>
>>> This email sent to [EMAIL PROTECTED]
>>
>
> _______________________________________________
>
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/cocoa-dev/clarkcox3%40gmail.com
>
> This email sent to [EMAIL PROTECTED]
>



-- 
Clark S. Cox III
[EMAIL PROTECTED]
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to