如何解决错误 C2440“初始化”:无法从“_Ty”转换为“_Objty”

问题描述 投票:0回答:2

我正在尝试编写一种算法来查找具有特定请求总和的给定向量的子集。 我正在尝试使用 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 文件中,我什至不知道代码的哪一行导致了它。 我该如何解决这个问题?

编辑:我没有包含运行该函数所需的一些代码,所以这里是:

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);
}
c++ stl
2个回答
1
投票

这个问题是这样的:

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

这里

temp
属于
vector<int>
类型,但
subsets_a
subsets_b
属于
vector<vector<int>>
类型。由于值类型分别为
int
vector<int>
,因此它们不匹配,因此无法编译。

根据您的需要,可以将

temp
制作为
vector<vector<int>>
,或者将
int
vector
中每个
subsets_a
中的各个
subsets_b
复制到
temp
中。


0
投票

通常,当您在 Visual Studio 中遇到类似错误(例如 C2440)时,可能会令人沮丧,因为它只向您显示发生错误的 STL。或者你可能会这么想。但是,输出选项卡确实会向您显示代码中触发错误的行。看截图。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.