奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
Strange code throwing compile error template< J, int aSize=10> C2143: syntax error : missing ';' before '<'
我正在研究一个有趣的问题。
客户有在VS2013中构建的代码,他们有大量的宏,在一个案例中,我不明白为什么。 Visual Studio 2013 Platform 工具集 V120xp。
template< class J, int a_iSize = 10 >
struct testme {
private:
vector< J > data;
};
上面的代码抛出错误:
1>c:\customers\xxx.h(334(:错误 C2143:语法错误:在"<"之前缺少";">
但是,如果他们通过用宏包装结构来更改结构testme
的所有用法,如下所示:
#define TEST_ME testme
代码编译良好。
我是模板的新手,想知道我是否缺少一些基础级别。
我大致了解模板的概念,但这是一个有趣的细微差别。
我需要向下挖掘并创建一个较小的测试用例。 目前,上面的代码片段是较大代码块的一部分,因此调用中可能存在导致此问题的内容。
此外,我只能运行"C"预处理器并比较两个*.i
文件。 这可能会显示一些东西。
客户用宏包装模板函数的用例很有趣。当我看到这个时,我想"缺少一些东西,如果这样做,可以消除宏的使用。 这就是我要找的东西。
对于此代码:
template< class J, int a_iSize = 10 >
struct testme {
private:
vector< J > data;
};
int main()
{
testme<int> t;
}
以下错误:
error C2143: syntax error : missing ';' before '<
此处重复。
可能发生的情况是缺少指定vector
位于std
命名空间中。
这就是为什么头文件应该使用命名空间名称,而不是依赖某些外部文件来提供此名称的原因。
此外,文件中应包含<vector>
标头。
#include <vector>
template< class J, int a_iSize = 10 >
struct testme {
private:
std::vector< J > data;
};
int main()
{
testme<int> t;
}
以下编译没有错误。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- &lt;&lt;操作员在C 中超载错误
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- '&lt;'''&lt;'''&quot的模板类错误''令牌”
- 在尝试超载&lt;&lt;时链接错误2005和1169操作员
- 错误:没有匹配'运算符<<"在'std::cout
- 过载<<比如cout错误
- 重载& lt; & lt;为什么我得到以下错误
- 重载ostream&时转换错误无效;operator< & lt;
- 重载<<运算符错误C2804:二进制'运算符<<'参数太多
- 编译器错误,包括'<'代币
- 重载& lt; & lt;错误