簡體   English   中英

如何解決錯誤 C2440“初始化”:無法從“_Ty”轉換為“_Objty”

[英]how to resolve Error C2440 'initializing': cannot convert from '_Ty' to '_Objty'

我正在嘗試編寫一個算法來查找具有特定請求總和的給定向量的子集。 我正在嘗試使用 Antti Laaksonen 在“競爭程序員手冊”中描述的“中間相遇”技術。 這是我的代碼:

vector<int> subset_with_sum1(vector<int> set, int requested_sum) {
    int half = set.size() / 2;
    vector<int> set_a(set.begin(), set.begin() + half),
        set_b(set.begin() + half, set.end());
    auto subsets_a = get_subsets1(set_a),
        subsets_b = get_subsets1(set_b);
    vector<int> sums_a(subsets_a.size()), sums_b(subsets_b.size());
    transform(
        subsets_a.begin(),
        subsets_a.end(),
        sums_a.begin(),
        sum_vector
    );
    transform(
        subsets_b.begin(),
        subsets_b.end(),
        sums_b.begin(),
        sum_vector
    );
    for (int i = 0; i < sums_a.size(); i++)
        if (sums_a[i] == requested_sum)
            return subsets_a[i];
    for (int i = 0; i < sums_b.size(); i++)
        if (sums_b[i] == requested_sum)
            return subsets_b[i];
    for (int i = 0; i < sums_a.size(); i++)
        for (int j = 0; j < sums_b.size(); j++)
            if ((sums_a[i] + sums_b[j]) == requested_sum) {
                vector<int> temp(subsets_a.begin(), subsets_a.end());
                temp.insert(temp.end(),subsets_b.begin(), subsets_b.end());
                return temp;
            }
}

此代碼產生標題中提到的錯誤。 這是完整的錯誤:

Error   C2440   'initializing': cannot convert from '_Ty' to '_Objty'   PracticeIOI C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\xmemory 671

此錯誤出現在本網站上的其他問題中,但總是與一些用戶定義的類和指針有關,我都不使用它們。 Microsoft 文檔也是如此。 另外,由於錯誤發生在 STL 文件中,我什至不知道我的代碼的哪一行導致它。 我怎樣才能解決這個問題?

編輯:我沒有包含一些運行 function 所需的代碼,所以這里是:

vector<vector<int>> get_subsets1(vector<int> nums) {
    int full = 1 << nums.size();
    bitset<8 * sizeof(int)> set;
    vector<vector<int>> subsets;
    vector<int> temp;
    for (int i = 0; i < full; i++) {
        set = bitset<8 * sizeof(int)>(i);
        temp = vector<int>();
        for (int j = 0; j < nums.size(); j++)
            if (set[j])
                temp.push_back(nums[j]);
        subsets.push_back(temp);
    }
    return subsets;
}
int sum_vector(vector<int> vec) {
    return accumulate(vec.begin(), vec.end(), 0);
}

這個問題在這些方面:

vector<int> temp(subsets_a.begin(), subsets_a.end());
temp.insert(temp.end(),subsets_b.begin(), subsets_b.end());

這里temp的類型為vector<int> ,但subsets_asubsets_b的類型為vector<vector<int>> 由於值類型分別是intvector<int> ,它們不匹配,因此無法編譯。

根據您的需要,將temp設為vector<vector<int>> ,或將subsets_asubsets_b的每個vector中的單個int復制到temp中。

暫無
暫無

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

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