我想知道如何修复此错误:
错误:聚合' Padron_Electoral :: getFileSize(const char *):: stat stat_buf'具有不完整的类型,无法定义
有问题的方法是:
long long const Padron_Electoral::getFileSize(const char* filename) {
struct stat stat_buf; // This line doesnt compile en the computer Im currently working on, If tried on another computer this method compiles and work.
int rc = stat(filename, &stat_buf);
return rc == 0 ? stat_buf.st_size : -1;
}
如果我评论这个方法,其余的代码编译,我使用GNU GCC编译器。两台计算机都有相同的编译器,我在Codeblocks中工作。如果我尝试在控制台上编译它会抛出相同的错误。有谁有同样的错误吗?可能是什么原因以及如何解决它?
两台计算机中的代码相同,#include #include和.h文件的包含
它引发的其他错误:
错误:无效使用不完整类型' struct Padron_Electoral :: getFileSize(const char *):: stat'
错误:' struct Padron_Electoral :: getFileSize(const char *):: stat'
的前向声明
#include可以包含在编译代码的计算机上,但在另一台计算机上包含抛出错误:
构建:Prueba中的Debug(编译器:GNU GCC编译器) c:\ mingw \ include \ io.h | 301 |错误:' off64_t'没有命名类型 c:\ mingw \ include \ io.h | 302 |错误:' off64_t'没有命名类型 c:\ mingw \ include \ unistd.h | 65 |错误:' off_t'尚未宣布| C:\ Users \ Gabriel \ Documents \ Progra II \ Prueba \ main.cpp ||在函数' int main()': C:\ Users \ Gabriel \ Documents \ Progra II \ Prueba \ main.cpp | 7 | error:aggregate' main():: stat stat_buf'具有不完整的类型,无法定义| C:\ Users \ Gabriel \ Documents \ Progra II \ Prueba \ main.cpp | 8 |错误:无效使用不完整类型' struct main():: stat' | C:\ Users \ Gabriel \ Documents \ Progra II \ Prueba \ main.cpp | 7 |错误:转发声明' struct main():: stat' 构建失败:6个错误,0个警告(0分钟,0秒(秒))
代码无法编译的计算机的操作系统是:Windows 7 Ultimate。
代码无法编译的计算机的处理器:Intel Core i5 4440 CPU 3.10GHz
MinGW的。 GCC 4.8.1(两台计算机)
IDE:Codeblocks 13.12(两台机器都使用此IDE)
两者都是64位操作系统
编译和运行的计算机的操作系统:Windows 7 Home Premium。
编译和工作的计算机处理器:Intel Pentium CPU P6100 2.0GHz
谢谢
编辑:代码现在编译,MinGW32问题
long long const Padron_Electoral::getFileSize(const char* filename) {
#if __MINGW32__
struct __stat64 stat_buf;
int rc = __stat64(filename, &stat_buf);
return rc == 0 ? stat_buf.st_size : -1;
#else
struct stat stat_buf;
int rc = stat(filename, &stat_buf);
return rc == 0 ? stat_buf.st_size : -1;
#endif
return 0;
}
问题仍然是MinGW为什么会在一台计算机上而不是另一台计算机上抛出此方法的错误。
答案 0 :(得分:2)
struct stat定义在哪里?
编译器告诉你他找不到stat的定义,因此stat_buf的类型不完整(这意味着它只能被定义为指针)。
它意味着编译时编译的两台计算机之间存在某些差异。
要查明问题,您应该尝试在更简单的程序中隔离问题并尝试编译并在两个系统上运行它。像下面这样的东西就足够了:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main()
{
struct stat stat_buf; // This line doesnt compile en the computer Im currently working on, If tried on another computer this method compiles and work.
int rc = stat("testfile.txt", &stat_buf);
return rc == 0 ? stat_buf.st_size : -1;
}
这是一个完整的编译程序,您应该能够在问题中发布您在两个目标系统上获得的编译错误。
明确说明两个目标系统(显然不相同)也可以提供帮助: - 编译器版本 - 操作系统 - 处理器 - 如果可能的话,实际的编译行和/或makefile。
例如,由于缺少某些定义,例如_POSIX_C_SOURCE
,可能会出现此类问题如果你提供足够的信息,发现这些问题通常很容易。
修改强> 检查后,问题似乎与mingw有关。特别是在64位系统上使用MingW32。这里有一个可能的解决方案:64 bits file size on Mingw32
答案 1 :(得分:2)
代码现在编译,MinGW 32位,64位问题。希望这有助于其他人
long long const Padron_Electoral::getFileSize(const char* filename) {
#if __MINGW32__
struct __stat64 stat_buf;
int rc = __stat64(filename, &stat_buf);
return rc == 0 ? stat_buf.st_size : -1;
#else
struct stat stat_buf;
int rc = stat(filename, &stat_buf);
return rc == 0 ? stat_buf.st_size : -1;
#endif
return 0;
}
谢谢大家的帮助,特别是@kriss,根据Determine 64-bit file size in C on MinGW 32-bit
回答