【发布时间】:2016-05-17 08:45:27
【问题描述】:
我目前正在为一个类开发一个项目,在该项目中我必须在 C++ 中实现布谷鸟散列。问题是,我和 C++ 从来都不是朋友,我认为我们永远不会...
具体的问题是,我无法在已经存在的对象上设置指针。当我这样做时,我得到了编译错误:
没有可行的从 'const std::__1::basic_string 到 'std::__1::basic_string'的转换*
两个语句都出现错误:
E * activeE = e;
E * tempE = v1[pos];
v1 是一个 E 对象数组。
我认为这个错误是由于我对 C++ 基本概念的普遍误解造成的。我认为对你们来说这个问题是个笑话,但我还是希望你们能帮助我。
template <typename E, size_t N>
void Hashing<E,N>::add_(const E& e) {
size_t pos = h1(e);
size_t i = 0;
E * activeE = e;
E * tempE = v1[pos];
while (i < nmax) {
if (tempE == NULL) {
v1[pos] = activeE;
break;
}
v1[pos] = activeE;
activeE = tempE;
pos = h2(activeE);
tempE = v2[pos];
if (tempE == NULL) {
v2[pos] = activeE;
break;
}
v2[pos] = activeE;
activeE = tempE;
pos = h1(activeE);
tempE = v1[pos];
}
}
【问题讨论】:
-
该错误消息的末尾应该有一个
*。注意星星,它们在 C++ 中很重要 -
你混淆了指针和引用。
-
您将引用变量分配给指针变量。类型不匹配。但是您提供的错误信息与您的代码不匹配。
-
你是对的,有一个*
-
@backfloep 在这种情况下,请编辑您的问题并修复它。