用 C 风格编写的 C++ 程序不能用 C 编译器编译
C++ program written in C style doesn't compile with C compiler
我是一名学生,开始学习 C++,之前有一些 C 知识。我有一个用 C 风格编写的工作 C++ 代码,它有一个用于输入 double
或 string
的重载函数:
#include "stdio.h"
#include "string.h"
#include "ctype.h"
const int STR_LEN = 7;
int try_to_input(double* real_number);
int try_to_input(char (*string)[STR_LEN]);//line 16
int main()
{
return 0;
}
int try_to_input(double* real_number) {//line 35
int attempts_for_input = 3;
//stops when == 0
while (attempts_for_input) {
//if input unsuccessful
if (scanf_s("%lf", real_number) == 0) {
puts("Invalid input! Try again.");
attempts_for_input--;
//flush stdin
int tmp;
while ((tmp = getchar()) != EOF && tmp != '\n');
//extra '\n' after that for some reason
}
else return 0;
}
return -1;
}
int try_to_input(char (*string) [STR_LEN] ) { //line 53
int attempts_for_input = 3;
while (attempts_for_input) {
if (gets_s(*string, STR_LEN) == NULL) {
puts("Invalid input! Try again.\n");
attempts_for_input--;
//flush stdin
int tmp;
while ((tmp = getchar()) != EOF && tmp != '\n');
}
else return 0;
}
return -1;
}
但是当我将其编译为 C 时,出现以下错误:
(16): warning C4028: 形式参数 1 与声明不同
(35): warning C4028: 形式参数 1 与声明不同
(53): error C2084: 函数 'int try_to_input(double *)' 已经有主体
(35): 注意:参见 'try_to_input' 之前的定义
可能是什么问题呢?我的超载有什么问题?
正如 Jonathon Reinhart 评论的那样,事实证明,C 语言根本不支持 重载函数。
I have a working C++ code written in C style, that has an oveloaded function [..]
到此为止!
C 不 支持函数重载,因此会出现编译错误。在 Does C support overloading?
中阅读更多内容
我是一名学生,开始学习 C++,之前有一些 C 知识。我有一个用 C 风格编写的工作 C++ 代码,它有一个用于输入 double
或 string
的重载函数:
#include "stdio.h"
#include "string.h"
#include "ctype.h"
const int STR_LEN = 7;
int try_to_input(double* real_number);
int try_to_input(char (*string)[STR_LEN]);//line 16
int main()
{
return 0;
}
int try_to_input(double* real_number) {//line 35
int attempts_for_input = 3;
//stops when == 0
while (attempts_for_input) {
//if input unsuccessful
if (scanf_s("%lf", real_number) == 0) {
puts("Invalid input! Try again.");
attempts_for_input--;
//flush stdin
int tmp;
while ((tmp = getchar()) != EOF && tmp != '\n');
//extra '\n' after that for some reason
}
else return 0;
}
return -1;
}
int try_to_input(char (*string) [STR_LEN] ) { //line 53
int attempts_for_input = 3;
while (attempts_for_input) {
if (gets_s(*string, STR_LEN) == NULL) {
puts("Invalid input! Try again.\n");
attempts_for_input--;
//flush stdin
int tmp;
while ((tmp = getchar()) != EOF && tmp != '\n');
}
else return 0;
}
return -1;
}
但是当我将其编译为 C 时,出现以下错误:
(16): warning C4028: 形式参数 1 与声明不同 (35): warning C4028: 形式参数 1 与声明不同 (53): error C2084: 函数 'int try_to_input(double *)' 已经有主体 (35): 注意:参见 'try_to_input' 之前的定义
可能是什么问题呢?我的超载有什么问题?
正如 Jonathon Reinhart 评论的那样,事实证明,C 语言根本不支持 重载函数。
I have a working C++ code written in C style, that has an oveloaded function [..]
到此为止!
C 不 支持函数重载,因此会出现编译错误。在 Does C support overloading?
中阅读更多内容