我有一个小问题来更改元组布尔值。有谁知道bool的值不会改变吗?函数setState()查找所搜索的键!非常感谢您的帮助!

keyManager.h

class keyManager
{
private:
    std::vector<std::tuple<std::string, bool>> productKeys;

public:
    void addProductKey(std::string key);
    std::tuple<std::string, bool> getProductKey(int index);
    void setState(std::string searchKey, bool state);


    keyManager();
    ~keyManager();
};


keyManager.cpp

void keyManager::addProductKey(std::string key)
{
    productKeys.emplace_back(key, false);
}

std::tuple<std::string, bool> keyManager::getProductKey(int index)
{
    return productKeys[index];
}

void keyManager::setState(std::string searchKey, bool state)
{
    for (int x = 0; x < productKeys.size(); x++)
    {
        auto t = productKeys[x];
        if (std::get<std::string>(t) == searchKey)
        {
            std::get<bool>(t) = state;
        }
    }
}


主要()

keyManager kManager;
kManager.addProductKey(KEY_1);

kManager.setState(KEY_1, true);

auto t = kManager.getProductKey(0);
std::cout << std::get<bool>(t) << std::endl;


输出:0

该程序的执行没有错误,因此我假设我在某处发生了错误。

最佳答案

在您的keyManager::setState行中

auto t = productKeys[x];


复制,使用

auto& t = productKeys[x];


而是获得对productKeys[x]的引用。

10-04 14:16