我有一些结构数组,其中一些运算符被重载
struct xyz
{
int x; float y;
};
std::vector<xyz> a1,a2,a3;
当我用它作为
时a1 [ a2 [ i ] ] = a3 [ i ]
//by this I mean
//a1 [ a2 [ i ].x ].x = a3 [ i ].x
//a1 [ a2 [ i ].x ].y = a3 [ i ].y
我收到此错误“\ OCL6D24.tmp.cl”,第236行:错误: 表达式必须具有整数或枚举类型
我在OpenCL内核中使用它。但是这个问题类似于普通的C ++程序。 我该如何解决这个问题?
更新:我认为我不需要什么,特别是在OpenCL内核的情况下。但我解决了我的问题。这是一个设计缺陷。
答案 0 :(得分:1)
您必须使用某种关联容器才能做到这一点。例如std::map
或std::unordered_map
(在C++11
上)。 std::vector
仅支持使用整数类型进行索引(就像错误所说的那样)。
答案 1 :(得分:1)
std::vector::operator[]将size_t作为输入,但是您将xyz
的对象传递给它。这就是你的编译器拒绝你的代码的原因。
要解决您的代码,您可以重载operator int()
以隐式将对象转换为整数:
struct xyz
{
int x; float y;
operator int()
{
return x;
}
};
但是你需要确保返回值与向量中的正确索引相关。
或者使用某些关联容器,例如std::unordered_map
。