用for循环对struct结构体成员赋值,不知道为什么编译错误,求大佬解答

#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个需要考虑的地方:

  1. 在C++里使用了C风格的struct类型定义,并直接声明了一个变量find;需要搞明白C++里面通常是不必如此使用struct的。
  2. 在全局直接导入 std 名称空间,这是偷懒做法,一般是按需引入,例如  using std::cout;

 

报错的直接原因是:using namespace std; 引入了全局名称空间,其中 std::find是一个标准库函数,这个函数和结构体的全局变量 find 符号冲突了。直接的解决办法有:

  • 换一个变量名。
  • 或者不要定义全局变量,在main函数里定义变量:findmax find;
  • 或者不要引入全部的std;例如按需: using std::count; using std::endl; 

此外,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里面的判断语句是我经过化简之后得到的,再次感谢大佬不吝赐教