c ++ builder — неверный список аргументов при включении числовых рецептов nr3.h в c ++ builder

Я пытался использовать числовые рецепты версия 3 в моем проекте c ++ с использованием C ++ Builder из RAD XE 2.
Тем не менее, компилятор жалуется на все строки, как

typedef const NRvector<Int> VecInt_I;
typedef NRvector<Int> VecInt, VecInt_O, VecInt_IO;

… говоря «ungültige Argumentenliste» (извините за немецкий), что переводится как invalid list of arguments,

Использование того же файла в простой пустой программе работает нормально, хотя …

Но если я напишу в начале моего проекта C ++

#include <vcl.h>
#pragma hdrstop
#include "nr3.h"
int main(){
return 0;
}

… это дает мне эту ошибку.

Есть ли опция компилятора, которая вызывает это? Может быть, какая-то настройка проекта C ++ Builder?

-1

Решение

nr3.h делает using namespace std; и это также загрязняет глобальное пространство имен всеми его определениями типов. Проблема с линией:

typedef const NRvector<Int> VecInt_I;

и другие линии, включающие Int это потому что Int решено System::Int (vcl.h включает в себя определение этой функции, а также using namespace System;)

Есть дальнейшие ошибки с

typedef const NRmatrix<Char> MatChar_I;

из-за неопределенности между System::Char (тип) и Char определяется nr3.h,


Там нет простого решения. nr3.h имеет множество серьезных проблем, а не только то, что он загрязняет глобальное пространство имен. В качестве лейкопластыря вы можете редактировать его так, чтобы он помещал все свои определения в пространство имен (скажем, NR3) и вывезти using namespace std; , Но даже если вы его компилируете, этот код настолько ужасен, что вы столкнетесь со многими другими проблемами позже. Мой совет — просто не использовать его, и либо написать собственный код, основанный на его алгоритмах, либо полностью искать какое-то другое решение.

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector