我正在尝试使用Dev-C ++(版本4.9.9.2)和Windows XP Pro SP3 32位下的标准编译器(我认为g ++使用MinGW)重建某人的旧C ++项目。在其中一个文件中包含strsafe.h,当我尝试编译时,我收到此错误:
expected primary-expression before ',' token
错误指向的代码行在strsafe.h(Microsoft(?)库头文件)中看起来像这样:
hr = StringGetsExWorkerA(pszDest, cchDest, cbDest, NULL, NULL, 0);
每条线都有2个“预期的主要表达式”错误。我发现this forum thread表明NULL值未被正确识别,并建议我在strsafe.h之前包含<cstddef>
。我这样做了,它不起作用。此外,似乎实际上定义了NULL,因为当我在包含strsafe.h之前'#define NULL 0'时,我收到一个错误,告诉我我正在那里重新定义它。
对不起,我无法提供更多详细信息,但重现此错误的代码只是“#include <strsafe.h>
”,所以我真的不知道还能说些什么。有没有人知道可能会发生什么以及如何解决这个问题?
谢谢!
(我已经尝试下载最新版本的Microsoft Platform SDK,因此我有strsafe.h的最新版本)
答案 0 :(得分:0)
我想知道NULL被定义为什么?也许它不是0,它可能是任何东西(尽管如果有人将NULL定义为0以外的东西,那将会很奇怪。)
尝试以下操作,看看是否有效。
#undef NULL
#define NULL 0
答案 1 :(得分:0)
我最初的想法是至少有一个标识符尚未声明。
尝试以下方法:
您可能会发现未声明标识符,或者其中一个标识符被声明为类型而不是对象。
答案 2 :(得分:0)
查看strsafe.h
文件,看起来这个函数是一个内部函数(它被#ifndef STRSAFE_LIB_IMPL .... #endif
块包围),它包含在StringCbGetsExA
或StringCbGetsExA
等函数中。你不应该使用那些吗?
答案 3 :(得分:0)
我认为您的包含路径中可能包含多个SDK标头。检查您的包含路径; gcc的“-H
”选项可以帮助您找出正在发生的混合(如果有)。