2011-07-30 26 views
31

tôi có những lời cảnh báo sau khi biên dịch một dự án openFrameworks 007 trên Visual Studio 2010 SP1:cảnh báo C4003: không đủ các thông số thực tế cho macro 'max' - Visual Studio 2010 C++

d:\pedro\development\videoflow\openframeworks\libs\openframeworks\types\ofcolor.h(127): warning C4003: not enough actual parameters for macro 'max' 
d:\pedro\development\videoflow\openframeworks\libs\openframeworks\types\ofcolor.h(128): warning C4003: not enough actual parameters for macro 'max' 
d:\pedro\development\videoflow\openframeworks\libs\openframeworks\graphics\ofpixels.h(150): warning C4003: not enough actual parameters for macro 'max' 
d:\pedro\development\videoflow\openframeworks\libs\openframeworks\graphics\ofpixels.h(151): warning C4003: not enough actual parameters for macro 'max' 

Từ những gì tôi có thể nói điều này cảnh báo thường được theo sau bởi lỗi nhưng trong trường hợp của tôi tất cả mọi thứ hoạt động ok. Các mã bị ảnh hưởng dưới đây:

const float srcMax = ((sizeof(SrcType) == sizeof(float)) ? 1.f : numeric_limits<SrcType>::max()); 
const float dstMax = ((sizeof(PixelType) == sizeof(float)) ? 1.f : numeric_limits<PixelType>::max()); 

Tôi cố gắng để thiết lập NOMINMAX trên Preprocessor nhưng vì openFrameworks cũng định nghĩa NOMINMAX trên ofConstants.h tôi nhận được một loạt các cảnh báo rằng NOMINMAX đã được xác định.

Tôi đã cố gắng xác định NOMINMAX trên các tệp openFrameworks bị ảnh hưởng nhưng kết quả trên cùng một cảnh báo (trên thực tế nếu tôi phân tích các tệp được bao gồm trong ofColor.h và ofPixel.h, chúng sẽ bao gồm ofConstants.h để NOMINMAX phải được xác định).

Bất kỳ ý tưởng nào về cách giải quyết vấn đề này? Nếu bạn không ... điều gì sẽ là tốt nhất? Cảnh báo này hoặc một loạt các cảnh báo rằng NOMINMAX đã được xác định?

EDIT:

BTW khi tôi nói chuyện về các lỗi tôi đã nói chuyện về những: warning C4003 and errors C2589 and C2059 on: x = std::numeric_limits<int>::max();

tôi có được điều này (cảnh báo cộng với 2 lỗi) nếu tôi cố gắng tạo lại vấn đề trên một ++ Dự án sạch C. Nhưng trên dự án openFrameworks của tôi, tôi chỉ nhận được các cảnh báo. Đó là lý do tại sao tôi bị lẫn lộn !!

Trả lời

36

Thêm #undef max vào đầu tệp có liên quan.

+4

Đừng quên '#ifdef max' trước. – Puppy

+2

@DeadMG tại sao? Nó có phong cách tốt không? Tôi đã thử nó trên IdeOne và không nhận được bất kỳ cảnh báo hoặc lỗi nào. –

+0

Vấn đề là tệp được đề cập không phải là mã của tôi. Mã openFrameworks và việc thay đổi mã nguồn của thư viện có thể là PITA sau này nếu thư viện được cập nhật. – petersaints

57

Bạn không phải là người đầu tiên bị các macro cổ này cắn. Họ không thể loại bỏ chúng, điều đó sẽ phá vỡ mã cũ. Vì vậy, họ đã đưa ra một macro khác để loại bỏ sting. Làm cho nó trông như thế này:

#ifndef NOMINMAX 
# define NOMINMAX 
#endif 
#include <windows.h> 
// Rest of your #includes here 
//... 
+0

Và để tránh cảnh báo về định nghĩa lại, '#ifndef NOMINMAX #define NOMINMAX #endif #include ' – MSalters

Các vấn đề liên quan