簡體   English   中英

無法從&#39;const std :: __ 1 :: basic_string轉換 <char> 到&#39;std :: __ 1 :: 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;

現在,您會得到聲稱的錯誤,這是因為econst ,但是您正在嘗試創建指向它的非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值分配給指針。

您似乎不清楚對象,值和地址之間的區別,所以我不會猜測v1vector<E>還是vector<E*> 順便說一句,我不會猜測應該如何固定該行。 至少有兩個可能的含義完全不同的修補程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM