2012-12-06 145 views
1

任何想法,爲什麼我會得到這個錯誤?:錯誤: 'BadDevice' 沒有在這個範圍內聲明

error: ‘BadDevice’ was not declared in this scope 

我已經包括:

#include <X11/Xlib.h> 

#include <X11/extensions/XInput2.h> 

在我的類頭文件中。

我這樣使用它:

int ret = XIGrabDevice(display_, 2, LinuxInputManager::getWindow(), 
          CurrentTime, None, GrabModeAsync, 
          GrabModeAsync, False, &eventMask_); 
     if (ret == BadValue) 
      std::cout << "bad value" << std::endl; 
     else if (ret == BadDevice) 
      std::cout << "BadDevice" << std::endl; 
     if (ret == BadMatch) 
      std::cout << "BadMatch" << std::endl; 
     if (ret == BadWindow) 
      std::cout << "BadWindow" << std::endl; 

     if (ret) { 
      std::cout << "not available 3" << std::endl; 
     } 

乾杯

賈勒特

+0

顯示我們'BadDevice'聲明,大概一個'enum' –

+0

嗯,這是從功能'XIGrabDevice',這是一個返回值在'X11/extensions/XInput2.h'中定義(ala http://linux.die.net/man/3/xigrabdevice)。我是否需要自己定義這些?如果是這樣,我分配給他們什麼值? – Jarrett

+0

好吧,看起來BadDevice沒有在任何地方的X頭文件中定義。但是,它在手冊頁上列出爲可能的返回值。也許手稿頁是陳舊的?不知道... – Jarrett

回答

0

這是你如何使用它

int rc; 
if ((rc = XIGrabDevice(dpy, 2, win, CurrentTime, None, GrabModeAsync, 
         GrabModeAsync, False, &mask)) != GrabSuccess) 
{ 
    fprintf(stderr, "Grab failed with %d\n", rc); 
    return; 
} 

或嘗試(也試圖用你的函數)

int rc; 
if (!(rc = XIGrabDevice(dpy, 2, win, CurrentTime, None, GrabModeAsync, 
         GrabModeAsync, False, &mask))) 
{ 
    fprintf(stderr, "Grab failed with %d\n", rc); 
    return; 
} 

似乎BadValue,BadDevice,BadMatch ...將是一個int值,並且它們可能沒有在頭文件中定義,所以我會檢查以確保它們在某處。所以,嘗試關閉ret變量。您的錯誤代碼可能類似於1,2,3,4,或者它們可能是1或0.您必須自己定義錯誤代碼。

下面是如何他人使用XIGrabDevice一個示例程序:http://people.freedesktop.org/~whot/xi2-recipes/part5.c

相關問題