Android ni/src/SDL/debugger.cpp:1283:13:error:';int i';之前在这里声明的eclipse

Android ni/src/SDL/debugger.cpp:1283:13:error:';int i';之前在这里声明的eclipse,android,c++,eclipse,Android,C++,Eclipse,好的,所以我目前正在eclipse中使用android sdk和adt等开发一个android应用程序。当我编译代码时,我遇到了一些错误,我绞尽脑汁想了好几天在发布之前在这里查找类似的线程,但没有一个适合我的满意,因为我尝试了与我的问题类似的各种解决方案 在eclipse中用于编译: 工具链:android GCC Builder:android Builder GNU C++ 以下是我得到的错误: jni/src/SDL/debugger.cpp:436:21: error: format n

好的,所以我目前正在eclipse中使用android sdk和adt等开发一个android应用程序。当我编译代码时,我遇到了一些错误,我绞尽脑汁想了好几天在发布之前在这里查找类似的线程,但没有一个适合我的满意,因为我尝试了与我的问题类似的各种解决方案

在eclipse中用于编译:

工具链:android GCC

Builder:android Builder

GNU C++

以下是我得到的错误:

jni/src/SDL/debugger.cpp:436:21: error: format not a string literal and no format arguments [-Werror=format-security]
       printf(m->name);
                     ^
jni/src/SDL/debugger.cpp: In function 'void debuggerMemoryByte(int, char**)':
jni/src/SDL/debugger.cpp:1292:11: error: redeclaration of 'int i'
       int i = debuggerReadByte(addr+8);
           ^
jni/src/SDL/debugger.cpp:1283:13: error: 'int i' previously declared here
     for(int i = 0; i < 16; i++) {
             ^
jni/src/SDL/debugger.cpp: In function 'void debuggerMemoryHalfWord(int, char**)':
jni/src/SDL/debugger.cpp:1328:11: error: redeclaration of 'int i'
       int i = debuggerReadByte(addr+8);
           ^
jni/src/SDL/debugger.cpp:1319:13: error: 'int i' previously declared here
     for(int i = 0; i < 16; i++) {
             ^
jni/src/SDL/debugger.cpp: In function 'void debuggerMemory(int, char**)':
jni/src/SDL/debugger.cpp:1366:11: error: redeclaration of 'int i'
       int i = debuggerReadByte(addr+8);
           ^
jni/src/SDL/debugger.cpp:1355:13: error: 'int i' previously declared here
     for(int i = 0; i < 16; i++) {
             ^
jni/src/SDL/debugger.cpp: In function 'void debuggerOutput(char*, u32)':
jni/src/SDL/debugger.cpp:1403:13: error: format not a string literal and no format arguments [-Werror=format-security]
     printf(s);
             ^
cc1plus.exe: some warnings being treated as errors
make.exe: *** [obj/local/armeabi/objs/main/SDL/debugger.o] Error 1
jni/src/SDL/debugger.cpp:436:21:错误:格式不是字符串文字,也没有格式参数[-Werror=format security]
printf(m->name);
^
jni/src/SDL/debugger.cpp:在函数“void debuggerMemoryByte(int,char**)”中:
jni/src/SDL/debugger.cpp:1292:11:错误:重新声明“int i”
int i=调试读取字节(addr+8);
^
jni/src/SDL/debugger.cpp:1283:13:错误:前面在这里声明了“inti”
对于(int i=0;i<16;i++){
^
jni/src/SDL/debugger.cpp:在函数“void debuggerMemoryHalfWord(int,char**)”中:
jni/src/SDL/debugger.cpp:1328:11:错误:重新声明“int i”
int i=调试读取字节(addr+8);
^
jni/src/SDL/debugger.cpp:1319:13:错误:前面在这里声明了“inti”
对于(int i=0;i<16;i++){
^
jni/src/SDL/debugger.cpp:在函数“void debuggerMemory(int,char**)”中:
jni/src/SDL/debugger.cpp:1366:11:错误:重新声明“int i”
int i=调试读取字节(addr+8);
^
jni/src/SDL/debugger.cpp:1355:13:错误:前面在这里声明了“inti”
对于(int i=0;i<16;i++){
^
jni/src/SDL/debugger.cpp:在函数“void debuggerOutput(char*,u32)”中:
jni/src/SDL/debugger.cpp:1403:13:错误:格式不是字符串文字,也没有格式参数[-Werror=格式安全性]
printf(s);;
^
cc1plus.exe:某些警告被视为错误
make.exe:**[obj/local/armeabi/objs/main/SDL/debugger.o]错误1
以下是一些代码示例:

    for(int i = 0; i < 16; i++) {
      int a = debuggerReadByte(addr);
      int b = debuggerReadByte(addr+1);
      int c = debuggerReadByte(addr+2);
      int d = debuggerReadByte(addr+3);
      int e = debuggerReadByte(addr+4);
      int f = debuggerReadByte(addr+5);
      int g = debuggerReadByte(addr+6);
      int h = debuggerReadByte(addr+7);
      int i = debuggerReadByte(addr+8);
      int j = debuggerReadByte(addr+9);
      int k = debuggerReadByte(addr+10);
      int l = debuggerReadByte(addr+11);
      int m = debuggerReadByte(addr+12);
      int n = debuggerReadByte(addr+13);
      int o = debuggerReadByte(addr+14);
      int p = debuggerReadByte(addr+15);

    printf("%08x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
             addr,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,
             ASCII(a),ASCII(b),ASCII(c),ASCII(d),
             ASCII(e),ASCII(f),ASCII(g),ASCII(h),
             ASCII(i),ASCII(j),ASCII(k),ASCII(l),
             ASCII(m),ASCII(n),ASCII(o),ASCII(p));
      addr += 16;
    }
  } else
    debuggerUsage("mb");    
}

void debuggerMemoryHalfWord(int n, char **args)
{
  if(n == 2) {
    u32 addr = 0;
    sscanf(args[1], "%x", &addr);
    addr = addr & 0xfffffffe;
    for(int i = 0; i < 16; i++) {
      int a = debuggerReadByte(addr);
      int b = debuggerReadByte(addr+1);
      int c = debuggerReadByte(addr+2);
      int d = debuggerReadByte(addr+3);
      int e = debuggerReadByte(addr+4);
      int f = debuggerReadByte(addr+5);
      int g = debuggerReadByte(addr+6);
      int h = debuggerReadByte(addr+7);
      int i = debuggerReadByte(addr+8);
      int j = debuggerReadByte(addr+9);
      int k = debuggerReadByte(addr+10);
      int l = debuggerReadByte(addr+11);
      int m = debuggerReadByte(addr+12);
      int n = debuggerReadByte(addr+13);
      int o = debuggerReadByte(addr+14);
      int p = debuggerReadByte(addr+15);
for(int i=0;i<16;i++){
int a=调试读取字节(addr);
int b=debuggerReadByte(addr+1);
int c=debuggerReadByte(addr+2);
int d=debuggerReadByte(addr+3);
int e=debuggerReadByte(addr+4);
int f=debuggerReadByte(addr+5);
int g=debuggerReadByte(addr+6);
int h=debuggerReadByte(addr+7);
int i=调试读取字节(addr+8);
int j=调试读取字节(addr+9);
int k=debuggerReadByte(addr+10);
int l=debuggerReadByte(addr+11);
int m=debuggerReadByte(addr+12);
int n=debuggerReadByte(addr+13);
int o=debuggerReadByte(地址+14);
int p=debuggerReadByte(addr+15);
printf(“%08x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n”,
地址,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,
ASCII(a)、ASCII(b)、ASCII(c)、ASCII(d),
ASCII(e)、ASCII(f)、ASCII(g)、ASCII(h),
ASCII(i)、ASCII(j)、ASCII(k)、ASCII(l),
ASCII(m)、ASCII(n)、ASCII(o)、ASCII(p));
addr+=16;
}
}否则
调试程序用法(“mb”);
}
void debuggerMemory半字(整数n,字符**args)
{
如果(n==2){
u32 addr=0;
sscanf(参数[1]、“%x”、&addr);
addr=addr&0xfffffffe;
对于(int i=0;i<16;i++){
int a=调试读取字节(addr);
int b=debuggerReadByte(addr+1);
int c=debuggerReadByte(addr+2);
int d=debuggerReadByte(addr+3);
int e=debuggerReadByte(addr+4);
int f=debuggerReadByte(addr+5);
int g=debuggerReadByte(addr+6);
int h=debuggerReadByte(addr+7);
int i=调试读取字节(addr+8);
int j=调试读取字节(addr+9);
int k=debuggerReadByte(addr+10);
int l=debuggerReadByte(addr+11);
int m=debuggerReadByte(addr+12);
int n=debuggerReadByte(addr+13);
int o=debuggerReadByte(地址+14);
int p=debuggerReadByte(addr+15);
另外,似乎也出现了这些错误,函数“sscanf”无法解析,函数“printf”无法解析。这让我很恼火

我已经包括了所有的头文件等,但不是真的确定从那里去我希望有人在这里可以让我知道到底是什么与上面所述的错误发生了,谢谢你的帮助


对我来说,代码看起来是正确的,但不确定它可能错在哪里。

问题是您两次声明变量“int i”—— 创建循环时一次
int i=0
,在循环内部一次
int i=debuggerReadByte(addr+8);
。 您可以通过更改其中一个变量的名称来解决此问题,如
for(intz=0;z<16;z++)

您可以简单地将循环控制变量重命名为其他变量,因为您无论如何都不会在循环中使用它

error: format not a string literal and no format arguments [-Werror=format-security]
您可以通过使用
fputs()
put()
(但这会附加一个新行IIRC)来避免这种情况

另外,似乎也出现了这些错误,函数“sscanf”无法解析,函数“printf”无法解析。这让我很恼火

尝试包含
并使用
std::
前缀。您的代码段不显示包含

error: format not a string literal and no format arguments [-Werror=format-security]