【问题标题】:invalid conversion from ‘int (*)()’ to ‘int’ [-fpermissive]从“int (*)()”到“int”的无效转换 [-fpermissive]
【发布时间】:2014-09-19 14:21:04
【问题描述】:

我有两个这样的课程 具有方法 void loadFiledriver.cpputil.cpp

调用另一个方法 int initialDragonXPos
int loadFile(Dragon * dragons) 
{
    int index = 0;
    index++;
    dragons[index].setPosX(initialDragonXPos);
}

和方法int initialDragonXPos这样

int initialDragonXPos( )
{
    int pos = rand( ) % (MAX_DRAGON_XPOS * 2);
    pos = pos + MIN_DRAGON_XPOS;

    return pos;
}

这也是 setPosX 方法

void Dragon::setPosX(int posX)
{
    this->posX = posX;
}

所以我得到了错误:从‘int (*)()’到‘int’的无效转换[-fpermissive]。那么我该如何解决它

【问题讨论】:

  • 你必须调用一个函数来获取它的返回值...即使它不带参数。否则你只会得到它的地址,这当然是不同的类型。
  • 如果index++ 超出dragons 的范围怎么办?您应该检查一下(或者最好使用 C++ 容器类,例如 std::vector)。
  • @crashmstr: std::vector 通常不会在发布模式下检查。
  • @Deduplicator:除非您使用更高版本的 MSVC 编译器,它们会在发布版本中默认启用 on 边界检查,当然,这会带来很大的性能损失。
  • @Deduplicator 我的意思是,目前他不知道(本地)dragons 有多大,并且无法检查index 是否超出范围而不通过大小,使用全局,或#define。正确使用std::vector 会大大改变代码,他甚至可能不需要直接索引,或者至少能够知道数据的大小。

标签: c++


【解决方案1】:

您的dragons[index].setPosX(initialDragonXPos); 行正在尝试分配函数initialDragonXPos地址,由于类型不匹配而导致编译错误。

您需要实际调用该函数。改为:

dragons[index].setPosX(initialDragonXPos());

【讨论】:

  • 高级我还是不明白。能给我看看么。我认为 setPosX 需要 INT 参数,而且 initialDragonXPos 是返回 INT 所以看起来还可以,但不是@Bathsheba
  • initialDragonXPos() 返回一个int,它被传递给setPosX。仔细看我的回答。注意() 紧跟在initialDragonXPos 之后。
  • 非常感谢。先生,我没有仔细看你的评论。哈哈这是我第一次来这个社区。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 2019-11-19
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 2021-01-05
相关资源
最近更新 更多