所以我试图编写一个接收浮点值的函数,返回一个浮点值,并在mainf中显示printf。我一直得到同样的错误: markup2.c:58:错误:'GetPrice'的冲突类型 markup2.c:46:错误:'GetPrice'之前的隐式声明在这里
我在哪里弄错了?我试过对触及GetPrice的所有内容进行类型转换,但仍然没有运气。有人可以解释一下我做错了吗?
#include<stdio.h>
// define the constant MARKUP as float value 0.1
#define MARKUP 0.1
int main()
{
// declare variables
char proceed;
float value;
float markupValue;
// display welcome message to user and inform them of markup rate
printf("\nThank you for using Chad Hammond's markup calculator.\n");
printf("The current markup rate is %.1f%c.\n",MARKUP*100,'%');
// ask user if they want to perform a markup
printf("Would you like to markup an item? y/n:\n");
scanf("%c", &proceed);
// if yes, proceed to next step
if(proceed == 'y')
{
// prompt user for the price of item to be marked up
printf("Please enter a wholesale value to markup: ");
scanf("%f", &value);
// display input back to user
printf("The wholesale value you entered was: %c%.2f\n",'$', value);
markupValue = (value*MARKUP);
// display amount of increase
printf("The dollar amount of this increase will be: %c%.2f\n",'$', markupValue);
// display total price after increse
printf("The price for this item after markup is: %c%.2f\n",'$', (float)GetPrice(value));
}else
// if user did not want to markup an item, belittle them with sarcasm
printf("Well, if you didn't want to markup an item you should have just used a Ti-83 and left me alone!\n\n");
// display exit message
printf("Thank you for using HammondInstruments Markup Calculator, goodbye.\n");
// return that program has completed
return 0;
}
float GetPrice(float value)
{
float output;
value += value*MARKUP;
output = value;
return (float)output;
}
答案 0 :(得分:3)
您需要在GetPrice
之前声明或定义main
。
答案 1 :(得分:3)
C希望在使用它们之前看到它的功能(前向声明)。您在声明它之前已在GetPrice
中使用main
(函数定义在main
之后)。
当编译器看到GetPrice
的使用时,它假定它是一个尚未见过的函数,并生成一个隐式声明,它看起来像int GetPrice()
。稍后,当它看到函数声明时,它会看到实际函数签名与隐式声明不同,并抛出错误。
因此,解决方案是在GetPrice
之前定义main
,或在float GetPrice(float);
之前使用main
形式的转发声明 。前向声明(就像您在#include
的各种头文件中实际发现的那样)告诉编译器函数存在,但将其定义留待以后(甚至是另一个文件)。
答案 2 :(得分:1)
你不应该首先声明GetPrice
吗?然后是main
?
答案 3 :(得分:1)
您的主要问题是,由于您未在main
之前声明一个,因此编译器会为您提供与您的默认声明GetPrice
不匹配的默认声明,从而产生冲突。您应该在main
之前添加原型,或者在那里移动整个函数:
float GetPrice(float);
//main
float GetPrice(float value){...}
或
float GetPrice(float value){...}
//main