返回类型时不兼容的类型
incompatible types when returning type
我对 convertToPoint 函数有疑问。
int convertToPoint(int argc, char *argv[]) {
struct point p;
int x, y;
p.x = atoi(argv[1]);
p.y = atoi(argv[2]);
return p;
}
预期 return 点类型的结构,但收到以下错误:
错误:当return键入“struct point”但预期为“int”时类型不兼容
returnp;
有什么问题?
这是一个非常简单的问题。你说你想要 return a struct point
但是你的代码说函数应该 return int
.
int convertToPoint(
^^^
ups, shall return int
所以只需将其更改为 struct point
- 如:
#include <stdio.h>
struct point
{
int x;
int y;
};
struct point convertToPoint(int argc, char *argv[]) {
struct point p;
p.x = atoi(argv[1]);
p.y = atoi(argv[2]);
return p;
}
int main(int argc, char *argv[]) {
struct point p = convertToPoint(argc, argv);
printf("%d %d\n", p.x, p.y);
}
就是说 - 在不使用时传递 argc
有点奇怪。要么删除该函数参数,要么使用它来检查是否提供了足够的参数。喜欢:
p.x = (argc > 1) ? atoi(argv[1]) : 0;
p.y = (argc > 2) ? atoi(argv[2]) : 0;
另请注意,我删除了 int x, y;
,因为未使用这些变量。
问题是你告诉编译器你要返回 int
和 int convertToPoint(...)
。你想说 struct point convertToPoint(...)
如果您知道如何解析它,您看到的错误消息会告诉您这一点
error: incompatible types when returning type ‘struct point’ but ‘int’ was expected return p;
return p;
-> 这是编译器所能判断的麻烦语句。
incompatible types when returning
-> 你返回了错误的东西,检查你返回的是什么以及签名是什么
type ‘struct point’
-> 这就是你在体内返回的东西
but ‘int’ was expected
-> 这是函数签名中的值。
这是一个完整的例子
// convert.c
#include <stdio.h>
#include <stdlib.h>
struct point {
int x;
int y;
};
struct point convertToPoint(int argc, char *argv[]) {
struct point p;
int x, y;
p.x = atoi(argv[1]);
p.y = atoi(argv[2]);
return p;
}
int main(int argc, char** argv) {
struct point p = convertToPoint(argc, argv);
printf("%d, %d", p.x, p.y);
}
证明有效
~/src ❯❯❯ gcc -ansi convert.c -o convert ✘ 139
~/src ❯❯❯ ./convert 1 2
1, 2%
最后,您可以做一些重构来清理它
// convert.c
#include <stdio.h>
#include <stdlib.h>
struct point {
int x;
int y;
};
struct point convertToPoint(char x[], char y[]) {
struct point p;
p.x = atoi(x);
p.y = atoi(y);
return p;
}
int main(int argc, char** argv) {
//TODO: check for 2 args and print a helpful error message
struct point p = convertToPoint(argv[0], argv[1]);
printf("%d, %d", p.x, p.y);
}
我对 convertToPoint 函数有疑问。
int convertToPoint(int argc, char *argv[]) {
struct point p;
int x, y;
p.x = atoi(argv[1]);
p.y = atoi(argv[2]);
return p;
}
预期 return 点类型的结构,但收到以下错误:
错误:当return键入“struct point”但预期为“int”时类型不兼容 returnp;
有什么问题?
这是一个非常简单的问题。你说你想要 return a struct point
但是你的代码说函数应该 return int
.
int convertToPoint(
^^^
ups, shall return int
所以只需将其更改为 struct point
- 如:
#include <stdio.h>
struct point
{
int x;
int y;
};
struct point convertToPoint(int argc, char *argv[]) {
struct point p;
p.x = atoi(argv[1]);
p.y = atoi(argv[2]);
return p;
}
int main(int argc, char *argv[]) {
struct point p = convertToPoint(argc, argv);
printf("%d %d\n", p.x, p.y);
}
就是说 - 在不使用时传递 argc
有点奇怪。要么删除该函数参数,要么使用它来检查是否提供了足够的参数。喜欢:
p.x = (argc > 1) ? atoi(argv[1]) : 0;
p.y = (argc > 2) ? atoi(argv[2]) : 0;
另请注意,我删除了 int x, y;
,因为未使用这些变量。
问题是你告诉编译器你要返回 int
和 int convertToPoint(...)
。你想说 struct point convertToPoint(...)
如果您知道如何解析它,您看到的错误消息会告诉您这一点
error: incompatible types when returning type ‘struct point’ but ‘int’ was expected return p;
return p;
-> 这是编译器所能判断的麻烦语句。incompatible types when returning
-> 你返回了错误的东西,检查你返回的是什么以及签名是什么type ‘struct point’
-> 这就是你在体内返回的东西but ‘int’ was expected
-> 这是函数签名中的值。
这是一个完整的例子
// convert.c
#include <stdio.h>
#include <stdlib.h>
struct point {
int x;
int y;
};
struct point convertToPoint(int argc, char *argv[]) {
struct point p;
int x, y;
p.x = atoi(argv[1]);
p.y = atoi(argv[2]);
return p;
}
int main(int argc, char** argv) {
struct point p = convertToPoint(argc, argv);
printf("%d, %d", p.x, p.y);
}
证明有效
~/src ❯❯❯ gcc -ansi convert.c -o convert ✘ 139
~/src ❯❯❯ ./convert 1 2
1, 2%
最后,您可以做一些重构来清理它
// convert.c
#include <stdio.h>
#include <stdlib.h>
struct point {
int x;
int y;
};
struct point convertToPoint(char x[], char y[]) {
struct point p;
p.x = atoi(x);
p.y = atoi(y);
return p;
}
int main(int argc, char** argv) {
//TODO: check for 2 args and print a helpful error message
struct point p = convertToPoint(argv[0], argv[1]);
printf("%d, %d", p.x, p.y);
}