在strsafe.h中的','标记之前的预期主表达式

时间:2009-09-03 14:57:33

标签: c++ c

我正在尝试使用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的最新版本)

4 个答案:

答案 0 :(得分:0)

我想知道NULL被定义为什么?也许它不是0,它可能是任何东西(尽管如果有人将NULL定义为0以外的东西,那将会很奇怪。)

尝试以下操作,看看是否有效。

#undef NULL
#define NULL 0

答案 1 :(得分:0)

我最初的想法是至少有一个标识符尚未声明。

尝试以下方法:

  • 检查编译器文档以获取生成预处理输出(并生成它)的选项
  • 找到预处理输出的此行和
  • 依次为每个标识符向后搜索以查找其声明

您可能会发现未声明标识符,或者其中一个标识符被声明为类型而不是对象。

答案 2 :(得分:0)

查看strsafe.h文件,看起来这个函数是一个内部函数(它被#ifndef STRSAFE_LIB_IMPL .... #endif块包围),它包含在StringCbGetsExAStringCbGetsExA等函数中。你不应该使用那些吗?

答案 3 :(得分:0)

我认为您的包含路径中可能包含多个SDK标头。检查您的包含路径; gcc的“-H”选项可以帮助您找出正在发生的混合(如果有)。