首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strsafe.h中',‘标记前应有主表达式

strsafe.h中',‘标记前应有主表达式
EN

Stack Overflow用户
提问于 2009-09-03 14:57:33
回答 4查看 1.5K关注 0票数 0

我正在尝试使用Dev-C++ (版本4.9.9.2)和它附带的标准编译器(我认为是使用MinGW的g++ )在32位Windows XP Pro SP3下重建某人的旧C++项目。在其中一个文件中包含了strsafe.h,当我尝试编译时,我得到了这个错误:

代码语言:javascript
复制
expected primary-expression before ',' token

错误所指向的代码行位于strsafe.h ( Microsoft(?)库头文件)看起来都像这样:

代码语言:javascript
复制
hr = StringGetsExWorkerA(pszDest, cchDest, cbDest, NULL, NULL, 0);

这些行中的每一行都有两个“预期的主表达式”错误。我发现了this forum thread,它表明null值没有被正确识别,并建议我在strsafe.h之前包含<cstddef>。我这样做了,但它不起作用。此外,看起来NULL实际上是定义的,因为当我在包含strsafe.h之前执行'#define NULL 0‘时,我得到一个错误,告诉我我正在重新定义它。

很抱歉我不能提供更多的细节,但是重现这个错误的代码是简单的'#include <strsafe.h>',所以我真的不知道还能说什么。有没有人知道可能发生了什么,以及我如何解决这个问题?

谢谢!

(我已经尝试下载最新版本的Microsoft Platform SDK,因此我有一个最新版本的strsafe.h)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-03 15:08:01

我想知道NULL的定义是什么?也许它不是0,它可以是任何东西(尽管如果有人将NULL定义为非0的值,这将非常奇怪)。

尝试下面的方法,看看它是否有效。

代码语言:javascript
复制
#undef NULL
#define NULL 0
票数 0
EN

Stack Overflow用户

发布于 2009-09-03 15:34:50

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

尝试以下操作:

  • 有关生成预处理输出(以及生成预处理输出)的选项,请查看编译器文档。
  • 依次查找此行预处理输出和每个标识符的
  • ,向后搜索以查找其声明

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

票数 0
EN

Stack Overflow用户

发布于 2009-09-03 15:51:31

查看strsafe.h文件,这个函数似乎是一个内部函数(它被#ifndef STRSAFE_LIB_IMPL .... #endif块包围),并且它被StringCbGetsExAStringCbGetsExA之类的函数所包围。你不是应该用它们来代替吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1373940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档