一根路过的废柴
2021-02-12 16:30
采纳率: 100%
浏览 253

用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;
	    }
	}
    }
}

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 蒟蒻一枚 2021-02-12 19:48
    已采纳

    find和string里的函数名冲突了,可以定义在main里面,就没事了。再温馨提示一下,代码问题比较多。首先百钱百鸡find.x和find.y的最大值不对,因为这里的公鸡是7钱一个,母鸡是4钱一个。还有就是应该不只是在公鸡和母鸡钱之和是100时才有小鸡,应该是三个的钱之和为100。再提示一下,小鸡如果是几分之一钱一只的话要判断是否整除,int直接会向下取整。

    已采纳该答案
    1 打赏 评论
  • 幻灰龙 2021-02-12 17:40

    首先,在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’的符号了,这样就可以找到解决此类问题的入口。

    3 打赏 评论
  • 书山客 2021-02-12 18:46
    #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;
    	        }
    	    }
        }
    }
    1 打赏 评论
  • 一根路过的废柴 2021-02-12 20:31

    感谢大佬解惑现在已经成功解决了。其实我这里的是公鸡5钱,母鸡3钱,幼鸡三只1钱,大佬会认为我这里是7钱和4钱可能是看到了我if里面的,其实if里面的判断语句是我经过化简之后得到的,再次感谢大佬不吝赐教

    打赏 评论

相关推荐 更多相似问题