#include<iostream>
#include<iomanip>
using namespace std;
struct findmax
{
int x,y,z;
}find;
main()
{
for(find.x=0;find.x<20;find.x++)
{
for(find.y=0;find.y<33;find.y++)
{
if(7*find.x+4*find.y==100)
{
find.z=100-find.x-find.y;
cout<<"鸡翁有:"<<find.x<<" "<<"鸡母有:"<<find.y<<" "<<"鸡雏有:"<<find.z;
cout<<endl;
}
}
}
}
find和string里的函数名冲突了,可以定义在main里面,就没事了。再温馨提示一下,代码问题比较多。首先百钱百鸡find.x和find.y的最大值不对,因为这里的公鸡是7钱一个,母鸡是4钱一个。还有就是应该不只是在公鸡和母鸡钱之和是100时才有小鸡,应该是三个的钱之和为100。再提示一下,小鸡如果是几分之一钱一只的话要判断是否整除,int直接会向下取整。
首先,在C++语言中,struct 和 class 一样的,只是class默认访问级别是private,而struct的默认访问级别是public。
其次,struct一般用在定义兼容C API所需结构体时使用。通常你会看到三种struct的用法:
// C++ 用法,和 class 等价,区别于默认访问级别
struct Point {
int x;
int y;
void dump(){} // 定义成员函数
}
class Point {
public:
int x;
int y;
void dump(){} // 定义成员函数
}
// C 风格用法(1),一般此时不给结构体添加成员函数
struct Point {
int x;
int y;
} point; // 直接声明了一个Point的变量 point
// C 风格用法(2)
typedef struct {
int x;
int y;
} Point; // 通过 typedef 定义结构体名字为 Point
代码有2个需要考虑的地方:
报错的直接原因是:using namespace std; 引入了全局名称空间,其中 std::find是一个标准库函数,这个函数和结构体的全局变量 find 符号冲突了。直接的解决办法有:
此外,main函数一般要有返回值:
int main(){
// ...
return 0;
}
最后,要逐渐学会阅读错误提示,错误提示里写着:“reference to 'find' is ambiguous”,这就是符号冲突的典型错误提示,‘find’ 这个符号有歧义,就是说编译器至少找到了两个find的符号,那就要去想,find变量和什么冲突了?代码里只有一个,那就可能是标准库里有全局叫‘find’的符号了,这样就可以找到解决此类问题的入口。
#include<iostream>
#include<iomanip>
using namespace std;
struct findmax
{
int x,y,z;
};
main()
{
findmax find;
for(find.x=0;find.x<20;find.x++)
{
for(find.y=0;find.y<33;find.y++)
{
if(7*find.x+4*find.y==100)
{
find.z=100-find.x-find.y;
cout<<"鸡翁有:"<<find.x<<" "<<"鸡母有:"<<find.y<<" "<<"鸡雏有:"<<find.z;
cout<<endl;
}
}
}
}
感谢大佬解惑现在已经成功解决了。其实我这里的是公鸡5钱,母鸡3钱,幼鸡三只1钱,大佬会认为我这里是7钱和4钱可能是看到了我if里面的,其实if里面的判断语句是我经过化简之后得到的,再次感谢大佬不吝赐教