【问题标题】:XCode Expected unqualified-id TNT (Template Numerical Toolkit)XCode 预期 unqualified-id TNT(模板数值工具包)
【发布时间】:2013-10-21 23:48:07
【问题描述】:

在编译 TNT library 即 Template Numerical Toolkit 时,XCode 会引发此错误:

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

受影响的代码sn-p:

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 标头here

尝试添加分号“;”到每个模板的末尾都不起作用:

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++

【问题讨论】:

  • 我在某处发现了关于添加附件和 ;关于 C++ 模板的问题。我这样做了,但没有结果。

标签: c++ xcode


【解决方案1】:

这是一个使用 Clang 导致 error: expected unqualified-id 的最小示例(第 5 行):

#define N 

int main()
{
    int N=3;
}

因为第 5 行已扩展为 int =3;(您还会收到错误,例如 #define N 10,但还有一个额外的 note: expanded from macro 'N')。

所以我敢打赌,您的代码在包含标头 tnt_array1d_utils.h(可能在另一个标头中,这是邪恶的)之前在某处定义了一个宏 N,这似乎是一个非常糟糕的主意(单字母宏,之前包括)。

(注意:它与缺少分号无关。在类定义(模板或“普通”)之后需要分号,但在像这里这样的函数定义之后不需要分号。另外,一般来说,我建议你不要' t 修改来自外部库的标头。)

【讨论】:

  • 所以你的意思是这是模板数值工具包本身的语义错误,对吧?在那种情况下,我无法修改库。 math.nist.gov/tnt
  • 那将是令人惊讶的。在头文件上快速grep "define N" 只会给出#define NULL 0(tnt_i_refvec.h,第 33 行)。可能“#define N [something]”在您项目的另一部分(我建议您尝试文本搜索)。
  • 假设这是一个 XCode5/armv7 项目。
  • GitHub 搜索一无所获。我不是在为你搜索项目(而且我不熟悉“XCode5/armv7”),但还有另一种可能发生错误的方式:代码中没有实际的#define N(或例如#define N 10)但正在编译带有选项-DN(或例如-DN=10)。
  • 是的,我同意。现在您需要找到N 的定义位置。 (这可能会有所帮助:stackoverflow.com/q/11257455stackoverflow.com/q/290952(不要停留在第一个答案上))
猜你喜欢
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多