0

TNT ライブラリ、つまり Template Numerical Toolkit をコンパイルすると、XCode で次のエラーが発生します。

tnt/tnt_array1d_utils.h:33:9: Expected unqualified-id

影響を受けるコード スニペット:

namespace TNT
{


template <class T>
std::ostream& operator<<(std::ostream &s, const Array1D<T> &A)
{
    int N=A.dim1();   /// <--- this line 33:9

#ifdef TNT_DEBUG
    s << "addr: " << (void *) &A[0] << "\n";
#endif
    s << N << "\n";
    for (int j=0; j<N; j++)
    {
       s << A[j] << "\n";
    }
    s << "\n";

    return s;
}

TNTヘッダー全体はこちら

セミコロン「;」を追加しようとしました 各テンプレートの最後までは機能しませんでした:

namespace TNT
{


template <class T>
std::ostream& operator<<(std::ostream &s, const Array3D<T> &A)
{
    int M=A.dim1();
    int N=A.dim2();
    int K=A.dim3();

    s << M << " " << N << " " << K << "\n";

    for (int i=0; i<M; i++)
    {
        for (int j=0; j<N; j++)
        {
            for (int k=0; k<K; k++)
                s << A[i][j][k] << " ";
            s << "\n";
        }
        s << "\n";
    }


    return s;
};

私は使用しています

XCode5 GNU++11 libC++

libstdc++ も試してみました

4

1 に答える 1

1

Clangで発生する最小限の例を次に示しますerror: expected unqualified-id(5 行目):

#define N 

int main()
{
    int N=3;
}

5行目が展開されているためint =3;です(egでもエラーが発生します#define N 10が、追加でエラーが発生しますnote: expanded from macro 'N')。

したがって、あなたのコードはN、ヘッダー tnt_array1d_utils.h をインクルードする前にどこかでマクロを定義していると思います (おそらく別のヘッダーで、これは悪です)。

(注: セミコロンの欠落とは関係ありません。セミコロンはクラス定義 (テンプレートまたは「プレーン」) の後に必要ですが、ここのような関数定義の後には必要ありません。また、一般的に、ヘッダーを変更しないことをお勧めします。外部ライブラリから。)

于 2013-11-07T15:21:23.007 に答える