2012-05-21 2 views
1

Я преобразовал некоторый старый код Fortran в C с помощью конвертера f2c (f2c), и я создал решение Visual Studio 10 с использованием Cmake в Windows 7 (64-разрядная версия). Мне также пришлось связать мою C++-программу (test.cpp, содержащую мою основную функцию) с библиотекой f2c (построенной на моей системе с использованием nmake). Несмотря на то, что я работал с CMake и Visual Studio, после компиляции программы я теперь получает ряд загадочных ошибок, связанных с файлами заголовков, поставляемых с Visual Studio:Неожиданные ошибки в Visual Studio включают файлы

2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\intrin.h(141): error C2059: syntax error : '(' 
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\intrin.h(141): error C2059: syntax error : '-' 
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\intrin.h(141): error C2059: syntax error : ')' 
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(250): error C2027: use of undefined type '_Ty' 
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(250): error C2226: syntax error : unexpected type 'std::complex<_Other>' 
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(250): error C2988: unrecognizable template declaration/definition 
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(250): error C2059: syntax error : '-' 
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(250): error C2065: '_Ty' : undeclared identifier 
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(250): error C2059: syntax error : ')' 
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(263): error C2065: '_Ty' : undeclared identifier 
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(263): error C2065: '_Ty' : undeclared identifier 
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(264): error C2143: syntax error : missing ';' before '{' 
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(264): error C2447: '{' : missing function header (old-style formal list?) 

Создание файла решения Visual Studio из царапины, похоже, тоже не очень хорошо работают, и я все еще получаю те же ошибки. Что я могу сделать, чтобы выявить проблему с этими ошибками? Очевидно, что что-то не так с файлами, которые я включил или написал, но что это может быть? Ошибки не сразу указывают на определенный раздел кода, поэтому отладка сложна.

Вот ссылка на заголовочный файл f2c.h (f2c.h). Я добавил

#ifdef __cplusplus 
extern "C" { 
#endif 

к вершине и

#ifdef __cplusplus 
} 
#endi 

в нижней части этого файла заголовка, так как мой test.cpp программа C++.

+0

Это обычно указывает на одну из двух вещей: либо какой-либо заголовок имеет зависимость от другого заголовка, и вы не включили его, либо есть синтаксическая ошибка перед включением заголовка (возможно, в другой заголовок), который вызывает неправильно обработанный заголовок. – Sven

+0

@Sven: Спасибо, я попытался перетасовать порядок файлов заголовков, и кажется, что перемещение '#include f2c.h' в начало файла (без заголовков перед ним) все еще вызывает те же ошибки, а также некоторые дополнительные ошибки, обнаруженные в 'math.h'. Я не знаю, как исправить ситуацию, если 'f2c.h' действительно требуется, и файлы заголовков системы не могут быть удалены каким-либо образом. –

ответ

2

Похоже, проблема заключается в том, что f2c.h определяет количество макросов, в том числе некоторые для математических функций, таких как abs. Эти макросы вызывают проблемы, когда те же идентификаторы встречаются в стандартных заголовках.

По этой причине я рекомендую всегда включать f2c.h в качестве последнего заголовка в файле (или #undef конфликтующих макросов перед включением других файлов).

+0

Спасибо; это работает очень хорошо. Вместо макросов '# undef' я переместил' f2c.h' так, чтобы это был последний заголовок в файле. Это прекрасно работает! –

Смежные вопросы