-1

我在 I/O Kit Driver 模板中编写代码如下:

#include <IOKit/IOService.h>
class com_osxkernel_driver_IOKitTest : public IOService
{
  OSDeclareDefaultStructors(com_osxkernel_driver_IOKitTest)
   public:
        virtual bool    init (OSDictionary* dictionary = NULL);
        virtual void    free (void);
        virtual IOService*      probe (IOService* provider, SInt32* score);
        virtual bool    start (IOService* provider);
        virtual void    stop (IOService* provider);
}; 
#include "IOKitTest.h"
#include <IOKit/IOLib.h>
#define super IOService
OSDefineMetaClassAndStructors(com_osxkernel_driver_IOKitTest, IOService)
bool com_osxkernel_driver_IOKitTest::init (OSDictionary* dict)
{
    bool res = super::init(dict);
    IOLog("IOKitTest::init\n");
    return res;
}
void com_osxkernel_driver_IOKitTest::free(void)
{
    IOLog("IOKitTest::free\n");
    super::free();
} 
IOService* com_osxkernel_driver_IOKitTest::probe (IOService* provider, SInt32* score)
{
    IOService *res = super::probe(provider, score);
    IOLog("IOKitTest::probe\n");
    return res;
}
bool com_osxkernel_driver_IOKitTest::start (IOService *provider)
{
     bool res = super::start(provider);
     IOLog("IOKitTest::start\n");
     return res;
}
void com_osxkernel_driver_IOKitTest::stop (IOService *provider)
{ 
    IOLog("IOKitTest::stop\n");
    super::stop(provider);
}

构建此代码时,出现四个错误:

  1. 函数声明符后的预期函数体
  2. stray '\357' in program
  3. stray '\277' in program
  4. stray '\274' in program

你能看到错误吗?

4

2 回答 2

10

你能看到错误吗?

不,但是编译器可以。Xcode 会向你展示它。

我将您的代码粘贴到一个新项目中并进行了编译:

在此处输入图像描述

所有三个杂散字符都在代码的同一部分。
如果stray '\something'发生这样的错误,您的代码中有一个无法编译的字符,并且您通常看不到它们。它们通常来自出错的复制和粘贴。

只需删除有错误的行并重新写入即可。不要复制和粘贴或任何东西。

我拿了那部分代码并在十六进制编辑器中打开它。所以你可以看到这些错误是从哪里来的。

在此处输入图像描述

于 2012-03-16T14:08:02.063 回答
0

对于使用 KATE(KDE 高级文本编辑器)的任何人,我都可以通过打开导致错误的文件并取消选中“添加字节顺序标记 (BOM)”选项来修复类似的“杂散错误”,该选项可以在“工具”下找到菜单。取消选中此设置后,文件似乎没有更改,因此您需要实际保存 (Ctrl+S) 文件。当你重新编译时,错误就会消失。

于 2013-06-12T09:12:01.970 回答