gpt4 book ai didi

c++ - 关于异常的编译错误

转载 作者:行者123 更新时间:2023-11-30 00:42:04 24 4
gpt4 key购买 nike

我遇到了一些编译错误,但不知道是什么问题。代码似乎没有使用异常,但错误是关于它的。

//in misc.h:
char *basename(char *name); // line 94

// in misc.cc:
char *basename(char *name) { // line 12
char *result = name;
while(*name) {
if(*name == '/') result = name + 1;
name++;
}
return result;
}

编译错误

g++ -pipe -W -Wall -fopenmp -ggdb3 -O2  -c -o misc.o ../../src/misc.cc  
../../src/misc.cc: In function ‘char* basename(char*)’:
../../src/misc.cc:12: error: declaration of ‘char* basename(char*)’ throws different exceptions
../../src/misc.h:94: error: from previous declaration ‘char* basename(char*) throw ()’
make: *** [misc.o] Error 1

有人知道吗?谢谢和问候!


编辑:misc.h 中包含的文件是

#include <iostream>  
#include <cmath>
#include <fstream>
#include <cfloat>
#include <stdlib.h>
#include <string.h>

编辑: 在 -E 选项生成的 misc.i 中,

extern "C++" char *basename (char *__filename)  
throw () __asm ("basename") __attribute__ ((__nonnull__ (1)));
extern "C++" __const char *basename (__const char *__filename)
throw () __asm ("basename") __attribute__ ((__nonnull__ (1)));
# 640 "/usr/include/string.h" 3 4
# 1 "/usr/include/bits/string3.h" 1 3 4
# 23 "/usr/include/bits/string3.h" 3 4
extern void __warn_memset_zero_len (void) __attribute__((__warning__ ("memset used with constant zero length parameter; this could be due to transposed parameters")));
# 48 "/usr/include/bits/string3.h" 3 4
extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) void *
memcpy (void *__restrict __dest, __const void *__restrict __src, size_t __len) throw ()

{
return __builtin___memcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
}
...
# 641 "/usr/include/string.h" 2 3 4
...

最佳答案

您可能会从 libgen.h 中获取 basename() 的定义。在我的 OpenSUSE 系统上,libgen.h 中的版本在末尾定义为“throw ()”(通过 __THROW 宏)。

您可以尝试的一件事是通过添加 -E 标志告诉 gcc 仅运行预处理器阶段,然后搜索 basename 以查看正在定义的内容:

g++ -pipe -W -Wall -fopenmp -ggdb3 -O2  -E -o misc.i ../../src/misc.cc  

如果发生这种情况,您要么需要删除 libgen.h 的包含,匹配 throw 说明符,要么更改函数的名称。

关于c++ - 关于异常的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1993621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com