为什么VS2010在语法正确时会出现语法错误?
我遇到了VS2010(和VS2008)的问题,给出了一个很好的语法错误列表。 但是,语法确实是正确的。 这是一个小例子;
我在.h文件中有以下代码块
// Prototype Declarations LIST* createList (int (*compare) (void*, void*)); LIST* destroyList (LIST* plist); int addNode (LIST* pList, void* dataInPtr); bool removeNode (LIST* pList, void* keyPtr, void** dataOutPtr); bool searchList (LIST* pList, void* pArgu, void** pDataOut); bool retrieveNode (LIST* pList, void* pArgu, void** dataOutPtr); bool traverse (LIST* pList, int fromWhere, void** dataOutPtr); int listCount (LIST* pList); bool isListEmpty (LIST* pList); bool isListFull (LIST* pList);
LIST是一个typedef’d结构,FYI。 所有这些函数声明似乎都是正确的语法。 然而,在尝试构建时,我从第一个bool函数开始,从列表中得到以下语法错误。
错误2错误C2059:语法错误:’;’
我没有看到问题出在哪里。 同样,这只是一个小例子。 我还收到语法错误,如下所示
bool found;
错误29错误C2065:’bool’:未声明的标识符
我真的迷失了这个。 这里发布的代码不是我自己的,它来自数据结构书,但它看起来也是正确的。 任何帮助,将不胜感激。 谢谢!
bool
不是C中的基本类型。
Visual C ++只实现C90,它没有bool
类型。 C99通过
标头添加了对bool
支持,但Visual C ++不支持此function。
您应该使用int
或为bool
创建自己的typedef。
检查包含该标头的文件的文件扩展名。
如果您没有告诉它以不同的方式(在项目设置中),Visual Studio将自动将.c文件编译为C而不是C ++。
Visual Studio的“C”支持是……有趣 – 根据我的理解,它实际上是C89而不是C99,你不能只是轻弹一个开关来获得C99。 除了C89 / C99之外,bool不是C中的内置类型。
您可以将所有文件重命名为.cpp以将它们编译为C ++,或者修改项目设置以强制编译为项目中每个.c / .cpp / .cc文件的C ++。