-1

RAD XE 2 の c++ Builder を使用して、C++ プロジェクト内で数値レシピ バージョン 3を使用しようとしました。
ただし、コンパイラは次のようなすべての行について文句を言います

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 プロジェクトの設定でしょうか。

4

1 に答える 1

2

nr3.husing namespace std;また、すべての typedef でグローバル名前空間を汚染します。行の問題:

typedef const NRvector<Int> VecInt_I;

および関連する他の行Intは is because is because Intis resolve to System::Int(vcl.hこの関数の定義を含み、またusing namespace System;) です。

さらにエラーがあります

typedef const NRmatrix<Char> MatChar_I;

System::Char(型) とCharによって定義されたものとの間のあいまいさのためnr3.h


簡単な修正はありません。nr3.hグローバル名前空間を汚染するだけでなく、複数の重大な問題があります。NR3応急処置として、すべての定義を名前空間 (たとえば) に配置し、 を取り出すように編集できますusing namespace std;。しかし、たとえコンパイルできたとしても、このコードは非常に恐ろしく、後で他の多くの問題に遭遇するでしょう。私のアドバイスは、単にそれを使用せず、そのアルゴリズムに基づいて独自のコードを作成するか、まったく別のソリューションを探すことです。

于 2014-08-24T02:45:54.620 に答える