![](/img/trans.png)
[英]use of deleted function 'std::pair<const std::pair<std::basic_string<char>, std::basic_string<char> >
[英]No viable conversion from 'const std::__1::basic_string<char> to 'std::__1::basic_string<char> *'
我目前正在為一個類的項目工作,該類必須在C ++中實現布谷鳥哈希。 問題是,我和C ++從來都不是朋友,我認為我們永遠不會...
具體的問題是,我不能隨意在已經存在的Object上設置指針。 這樣做時,出現編譯錯誤:
從'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];
}
}
我收到編譯錯誤:
無法從'const std :: __ 1 :: basic_string轉換為'std :: __ 1 :: basic_string”
你確定嗎? 我不認為那是錯誤的意思。 我敢打賭說:
No viable conversion from 'const std::__1::basic_string to 'std::__1::basic_string*'
請注意,額外的*
非常重要,它是問題的根源。 您需要注意錯誤消息,細節很重要。
指針是保存其他內容地址的變量,因此要創建指向對象的指針,您需要使用“地址”運算符&
來獲取該對象的地址。
E* activeE = &e;
現在,您會得到聲稱的錯誤,這是因為e
是const
,但是您正在嘗試創建指向它的非const指針。 禁止這樣做,因為它會讓您通過指針修改const
對象。 你需要:
const E* activeE = &e;
您在Hashing<E,N>::add_
方法中具有const E& e
,但是在其中將e
分配給指向E
指針-實際上,這會產生不同的錯誤:
'const std::__1::basic_string to 'std::__1::basic_string*"
^
因此解決方法是更改:
E * activeE = e;
E * tempE = v1[pos];
至
const E * activeE = &e;
const E * tempE = &v1[pos];
const E& e ... E * activeE = e;
我敢打賭,您從該錯誤消息中錯過了一些選擇字符,例如*
和&
。 您正在嘗試將E
值分配給指針。
您似乎不清楚對象,值和地址之間的區別,所以我不會猜測v1
是vector<E>
還是vector<E*>
。 順便說一句,我不會猜測應該如何固定該行。 至少有兩個可能的含義完全不同的修補程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.