gpt4 book ai didi

c++ - const 引用元组 : cannot convert from int to const &

转载 作者:行者123 更新时间:2023-11-28 02:20:45 25 4
gpt4 key购买 nike

我正在尝试使用 VS2010 编译以下代码:

typedef enum EPinDirection{
EPinDirection_Unknown,
EPinDirection_In,
EPinDirection_Out
};

class cPin{
std::tuple<QString,EPinDirection> m_nameDir;

public:
cPin(){ m_nameDir = std::tuple<QString, EPinDirection>("noNamePin", EPinDirection_Unknown);}
cPin(QString name, EPinDirection dir) { m_nameDir = std::tuple<QString, EPinDirection>(name, dir); }
const std::tuple<QString,EPinDirection>& getNameDir() const {return m_nameDir;};
};

class cConnection{
std::tuple<const cPin&,const cPin&> m_data;

public :
cConnection();
cConnection(const cPin& start, const cPin& stop) {m_data = std::tuple<const cPin&, const cPin&>(start, stop);}

int setData(const cPin& start, const cPin& stop) {m_data = std::tuple<const cPin&, const cPin&>(start, stop);}
const std::tuple<const cPin&,const cPin&> & getData() const {return m_data;}
};

编译失败并显示消息:无法从“int”转换为“const cPin &”。指示的行号在 cConnection 中元组的声明处。

我不知道为什么。可能是什么原因?

最佳答案

编译错误是由于编译器试图用默认值初始化cConnection::m_data。由于元组需要两个 const 引用,因此无法执行此操作,因此会生成错误。

您可以通过删除 cConnection 的默认构造函数,并将剩余的构造函数更改为使用初始值设定项来解决此问题:

class cConnection {
std::tuple<const cPin&, const cPin&> m_data;

public:
cConnection(const cPin& start, const cPin& stop)
: m_data(std::tuple<const cPin&, const cPin&>(start, stop)) {
}
}

(您也可以通过将元组更改为具有指针而不是引用来解决此问题,但这在您的程序上下文中可能没有意义。)

如果您想进一步简化代码,请考虑使用 std::make_tuple(它可以推断类型参数)而不是 tuple 构造函数:

class cConnection {
std::tuple<const cPin&, const cPin&> m_data;

public:
cConnection(const cPin& start, const cPin& stop)
: m_data(std::make_tuple(start, stop)) {
}
}

关于c++ - const 引用元组 : cannot convert from int to const <T> &,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32635643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com