C++ XCode预期不合格id TNT(模板数字工具包)

C++ XCode预期不合格id TNT(模板数字工具包),c++,xcode,C++,Xcode,编译模板数值工具包时,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(); /// <

编译模板数值工具包时,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
{
模板

std::ostream&operator这里有一个导致
错误的最小示例:预期的不合格id
带有叮当声(第5行):

因为第5行已扩展为
int=3;
(您还将得到一个错误,例如
#define N 10
,但有一个额外的
注意:从宏“N”扩展而来。

因此,我敢打赌,您的代码在包含标题tnt_array1d_utils.h(可能在另一个标题中,这是邪恶的)之前的某个地方定义了一个宏
N
,这似乎是一个非常糟糕的主意(一个字母的宏,在包含之前)


(注意:它与缺少分号无关。类定义(模板或“普通”)后需要分号,但函数定义后不需要分号。此外,一般情况下,我建议您不要修改外部库的标题。)

我发现了一些关于添加外壳的问题,并在C++模板上发布。我这样做了,但没有结果。所以你的意思是,在模板数值工具箱本身中有一个语义错误,对吗?在这种情况下,我不能修改库。这将是令人惊讶的。仅在头文件中给出了一个<代码> >定义空0 (TNTHI iReVIEC.H,第33行)。很可能是“<代码>定义n(某物)<代码>”在您的项目的另一部分(我建议您尝试文本搜索)。让我们考虑一下这是一个XCODE5/ARMV7项目。GITHUB搜索什么也没给出。我没有为您搜索项目。(此外,我不熟悉“XCode5/armv7”),但还有另一种可能出现错误的方式:在代码中没有实际的
#define N
(或者例如
#define n10
),但使用选项
-DN
(或者
-DN=10
)编译。是的,我同意。现在你需要找到
N
的定义位置。(这可能会有帮助:和(第一个答案时不要停下来)
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;
};
#define N 

int main()
{
    int N=3;
}