【问题标题】:Fix error: taking address of temporary without changing codes修复错误:在不更改代码的情况下获取临时地址
【发布时间】:2015-04-20 12:05:37
【问题描述】:

我正在从旧的 gcc(3.x) 切换到 4.9.2,但我遇到了一些编译问题:

if (ROWID_IS_NULL(&pSumItem->getRowId()))

getRowId() 定义为:

rowid_t SumItem::getRowId()
{
    return row_id;
}

宏定义为:

#define ROWID_IS_NULL(a) \
    ((a)->key == 0 && (a)->ip_addr == 0)  

新代码已经使用运算符重载来进行计算,但仍然有很多旧代码使用非标准技术。是否可以在不更改代码的情况下解决此问题?

错误信息:

错误:获取临时地址 [-fpermissive]

编辑:不更改代码的含义

我想保持这条线正常工作

if (ROWID_IS_NULL(&pSumItem->getRowId()))

【问题讨论】:

  • 好吧,正如错误所暗示的那样(虽然我不会怪你没有那样解释它),-fpermissive,但这不是代码安全的最佳选择。
  • @chris 谢谢,但我不想使用那个标志

标签: c++


【解决方案1】:

我不知道您想在“不更改代码”部分采取多远。显然,无论应用什么修复程序都会以某种方式改变它们。

我认为这将是简单的解决方法:

static inline bool ROWID_IS_NULL(const rowid_t &id) {
    return(id.key == 0 && id.ip_addr == 0);
}

不过,诚然,这需要您在对 ROWID_IS_NULL 的调用中删除显式的 & 运算符。

【讨论】:

  • 也就是说,不改代码就不能安全解决这个问题吗?
  • 再一次,“不更改代码”是什么意思?显然,如果不改变 something 就无法修复它,至少,不是吗?
猜你喜欢
  • 1970-01-01
  • 2013-05-05
  • 2022-01-05
  • 2018-03-18
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
相关资源
最近更新 更多