使用`stdio.h`函数进行模板和名称查找

时间:2013-04-22 12:26:14

标签: c++ templates mingw fseek name-lookup

我正在尝试使用PCL在32位Windows 7中构建MinGW库。在构建outofcore模块时,我收到了几条关于_fseeki64的错误消息:

error: there are no arguments to '_fseeki64' that depend on a template parameter, so a declaration of '_fseeki64' must be available

octree_disk_container.h文件中,有一个

#ifndef WIN32
#define _fseeki64 fseeko
#endif

我已经测试过(生成#error),并且在处理文件时定义了WIN32_fseeki64似乎可用于编译器,因为这个小测试程序编译:

#include "stdio.h"
int main(int argc, char** argv) {
  FILE* f = fopen("C:/a.txt","r");
  if(!f) printf("NOPE");
  int seekret = _fseeki64(f,4,SEEK_SET);
  (void)seekret;
  return 0;
} 

如果我将_fseeki64定义为fseeko64,则错误消失并且模块会编译,但我不确定该行为与fseeko的行为是否与预期相同fseeki

那么,为了在这种情况下使用_fseeki64,我该怎么办?也许声明一个新的基类,将#define放在那里,然后像Base<T>::_fseeki64一样调用它? (从here获得了想法)

你有什么想法?

1 个答案:

答案 0 :(得分:1)

所以问题似乎是你的MinGW系统#define WIN32,但_fseeki64是微软主义,而不是MinGW所知道的POSIX。我认为你应该在MinGW上使用POSIX行为,这意味着使用fseeko