【问题标题】:Incompatible types: structure and scalar不兼容的类型:结构和标量
【发布时间】:2014-05-10 20:52:34
【问题描述】:

我在第一天使用 C,它与 C# 有点不同。我试图让一个函数返回一个结构,但我的代码看不到任何问题,但我不断收到错误“不兼容的类型:结构和标量”。

在我的 main.c 中,我执行此调用

struct Position pos = GetPosition();

在我的其他源文件中,我定义了函数:

struct Position getPosition(){
  struct Position pos;
  pos.latitude = 56;
  pos.longitude = 18;
  pos.time = 456;
  return pos;
}

我在头文件中定义了函数,并将其包含在我的 main.c 文件中。 我犯了什么错误?

【问题讨论】:

  • 这个蠕虫在 ideone demo 上完美运行。提示:C 区分大小写。
  • 我在使用 C 的第一天,它与 C# 有点不同 轻描淡写? :-)

标签: c


【解决方案1】:

这可能是因为您正在调用 GetPosition 并且您已声明 getPosition(检查案例)。

因为它没有看到原型,所以编译器会假装有一个函数GetPosition 返回一个int。其他一切都是正确的。

【讨论】:

  • 啊,习惯了C#的命名,竟然没有注意到它调用的是GetPosition而不是getPosition。但是在修复它之后,我仍然遇到了同样的错误。那么它一定意味着它仍然无法找到该功能? ideone.com/F8BE0C 获取完整代码。
  • @user1842278 在main 之前添加声明。 IE。在main 之前添加这一行:struct Position getPosition();。或者只是将main 移动到底部。
  • 我发现了问题!这当然是拼写错误,但我也无法执行“struct Position pos = getPosition();”。由于某种原因,我不得不将它们拆分为“struct Position pos; pos = getPosition();”
  • @user1842278 您可以毫无问题地从getPosition 初始化,您不需要额外的步骤。试试更小的程序吧?
  • 尝试更小的程序?我复制了这段代码并删除了打印ideone.com/Ttnv48,直到我拆分初始化和分配它才起作用。也许这是一个编译器错误?不知道,但是当我拆分它们时它会起作用,所以我想这就是我需要做的方式。
猜你喜欢
  • 2020-01-10
  • 2011-02-23
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 2018-09-11
相关资源
最近更新 更多