XCode 预期非合格 id TNT(模板数字工具包)
XCode Expected unqualified-id TNT (Template Numerical Toolkit)
在编译TNT库(即模板数值工具包)时,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;
};
我正在使用
XCode5GNU++11libC++
也尝试过libstdc++
下面是
一个导致 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
(可能在另一个标头中,这是邪恶的),这似乎是一个非常糟糕的主意(一个字母宏,在包含之前)。
(注意:它与缺少分号无关。在类定义(模板或"纯文本")之后需要分号,但在像这里这样的函数定义之后不需要分号。另外,一般来说,我建议您不要修改外部库中的标头。
相关文章:
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- AWS IoT 开发工具包:通过 TCP 端口 443 使用 MQTT
- 使用 AWS C++ 开发工具包分段上传 S3
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- 与 AWS 开发工具包的链接问题
- 使用代码在 AWS 开发工具包C++控制台应用程序上设置凭证
- 选择特定版本的 Visual Studio 命令行工具包,并根据特定版本的C++运行时环境编译文件
- 如何使用 AWS C++ 开发工具包在给定的开始和结束日期范围内列出 S3 中的文件
- 错误:必须设置CMake工具才能生成.在工具包选项中配置CMake工具
- 适用于 C++ 的 AWS 开发工具包:对 S3 传输进行完整性检查
- 在 Cloud9 上安装 AWS C++ 开发工具包时出现问题
- 如何为原生UI工具包扩展Ranorex?
- AWS Lambda C++ 开发工具包"Process exited before completing request"
- 无法在Windows 7 64位上安装CUDA工具包9.1.85
- 使用开发工具包将文件上传到 AWS C++
- AWS 开发工具包 C++ 代码不适用于发布版本
- 为什么使用适用于C++的 AWS 开发工具包创建 EC2Client 段错误
- AWS CPP S3 开发工具包是否支持"传输加速"
- AWS 开发工具包C++:某些 S3 集成测试失败
- XCode 预期非合格 id TNT(模板数字工具包)