C ++中的Typedef错误

时间:2011-06-08 15:05:57

标签: c++ c qt

我正在尝试使用我的Qt项目中包含C和C ++变体的库。

如果我包含C“.h”文件,似乎我可以使用它。但是,为了坚持我的C ++ QT项目的风格,我想使用“.hpp”C ++版本。

我在其中一个库头文件的代码块中收到错误:

#ifndef __SYS_SEMAPHORE_H__
#define __SYS_SEMAPHORE_H__ 
/**
 *  \file 
 *  \brief Include the right semaphore.
 *
 *  This file will auto-select the semaphore of choice,
 *  if one is to be defined.  
 *  \note We need to change the windows part to check _MT
 *  because that is how it determines reentrance!
 *
 */
#  if defined(_REENTRANT)

#    if defined(USE_NSPR_THREADS)
#        include "sys/SemaphoreNSPR.h"
namespace sys
{
typedef SemaphoreNSPR Semaphore;
}
// If they explicitly want posix
#    elif defined(__POSIX) && !defined(__APPLE_CC__)
#        include "sys/SemaphorePosix.h"
namespace sys
{
typedef SemaphorePosix Semaphore;
}
#    elif defined(WIN32)
#        include "sys/SemaphoreWin32.h"
namespace sys
{
typedef SemaphoreWin32 Semaphore;
}
#    elif defined(__sun) && !defined(__POSIX)
#        include "sys/SemaphoreSolaris.h"
namespace sys
{
typedef SemaphoreSolaris Semaphore;
}
#    elif defined(__sgi) && !defined(__POSIX)
#        include "sys/SemaphoreIrix.h"
namespace sys
{
typedef SemaphoreIrix Semaphore;
}
#    elif defined(__APPLE_CC__)
typedef int Semaphore;
#    else
#        include "sys/SemaphorePosix.h"
namespace sys
{
typedef SemaphorePosix Semaphore;
}
#    endif // Which thread package?

#  endif // Are we reentrant?

#endif // End of header

定义SemaphorePosix typedef的行是发生错误的地方,但是我在编译中遇到了类似的错误,这些错误正在执行相同类型的条件包括/ typedef'ing的几个不同的头文件。

具体来说,编译错误是“'SemaphorePosix'没有命名类型”

此外,应该能够访问sys / * .h - 我在include路径中从库包含sys文件夹的顶级包含文件夹

1 个答案:

答案 0 :(得分:0)

你试过::SemaphorePosix吗?或者也许这个类型是在另一个名称空间内定义的。