【发布时间】:2017-12-21 14:40:50
【问题描述】:
我有以下一段代码,我在其中使用宏来检查向量中是否存在元素。
#define x.contains(a) x.find(a)!=x.end()
void main(){
vector<int> v = {1,2,3,4};
if(v.contains(2))
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
但在编译时出现以下错误:
ISO C++11 requires whitespace after the macro name #define x.contains(a) x.find(a)!=x.end()
请告诉我一条出路。 谢谢。
【问题讨论】:
-
“请告诉我一条出路。” 使用模板函数,而不是宏。宏永远不是答案。 (*从不意味着偶尔,但对 99.999% 的用户而言并非如此)
-
为此使用宏是一个坏主意。写一个合适的函数就行了。
-
不要写
void main()。看看:stackoverflow.com/questions/636829/… -
如果你将它定义为 contains(x, a),它可以工作,但永远不会这样
-
在不相关的说明中,如果您想更通用并允许任何容器,那么您应该真正改用
std::find。