Я встретил некоторую ошибку компиляции, но не знаю, в чем проблема. Код, похоже, не использует исключение, но ошибка об этом.ошибка сборки об исключениях
//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
ли кто-то есть ключ? Спасибо и приветствую!
EDIT: Файлы, включенные в misc.h являются
#include <iostream>
#include <cmath>
#include <fstream>
#include <cfloat>
#include <stdlib.h>
#include <string.h>
EDIT: в misc.i генерируемой опцией -E,
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 в любом из исходных файлов. Так не подразумевается ли она в каждой программе на C++ и g ++ или какая-то другая системная библиотека? Можно ли узнать, какой файл системной библиотеки вызывает путаницу? – Tim
C требует, чтобы заголовки были независимыми; C++ - нет. Таким образом, любой заголовок C++ может включать в себя любые другие - и это может быть то, что происходит. Используйте только препроцессор, чтобы узнать, что происходит. –
Спасибо, Джонатан! Под «C требуется, чтобы заголовки были независимыми», вы имеете в виду, что в заголовке C нельзя включить другой заголовок? Что можно сказать, когда препроцессия успешна, а компиляция дает ошибку, как моя? – Tim