zoukankan      html  css  js  c++  java
  • C++ socket bind()函数报错 不存在从 "std::_Binder<std::_Unforced, SOCKET &, sockaddr *&, size_t &>" 到 "int" 的适当转换函数

    昨天还可以正常运行的程序,怎么今天改了程序的结构就报错了呢?我明明没有改动函数内部啊!!!

    内心无数只“草泥马”在奔腾,这可咋办呢?于是乎,小寅开始求助于亲爱的度娘......

    由于小寅知识水平有限,终于在花了很长的时间后找到了原因所在,时间大概这么


    长吧!!!哈哈哈

    首先向各位小伙伴展示一下小寅的错误代码,如下图:

    *******

    *******

    热心的度娘告诉小寅有一篇CSDN的文章有解决方法:

    Ps: 原文地址:https://blog.csdn.net/youyicc/article/details/80403833  (小寅是爱护知识产权的好青年,再此奉上大佬的文章地址)

    抱着崇拜大佬的心态(菜鸟内心独白),小寅勇敢的加上了::(此处双冒号是中文,主要是方便大家阅读,因为英文双冒号太小了)

    果然在大佬的指引下,伟大了VS也屈服了,那让人恶心的红色波浪线终于去世了,哈哈哈哈。

    然而。。。。。。。。。。。。。。

    小寅可是个爱学习 的孩子,我并不知道为什么要这样做啊!!!

    于是乎,我有吭哧吭哧地跑去找度娘了.....

    又过了很久。。。。。。。。很久。。。。。。

    我终于回来了~~~~

    待我向大家娓娓道来,看完你就会不由自主的发出一声 “哦,原来是这样啊” 的赞叹,哈哈哈哈

    首先,解释双冒号都有些啥子作用:

    1. 表示“域操作符”:

      例如:你有一个神奇的类,它叫做A(小明),A中有一个成员函数叫做function1(),当你要在cpp文件中定义这个函数时,应该这样写 A::function()

    2. 表示全局函数,直接用在全局函数前:

      这个用法就是我们上面的解决方法

    3. 表示引用成员函数及变量,作用域成员运算符:

      例如:System::Math::Sqrt() 相当于System.Math.Sqrt()

    其次解释完了双冒号的作用,可能有些小伙伴还是有点迷糊

    重点来了,敲黑板(屏幕)!

    1. 在我们一开始,bind的函数报错的原因是由于我们引用了命名空间std,如图:

     2. 这时我们查找std下的函数是会发现有一个和套接字bind绑定同名的函数,如图:

    3. 所以报错的原因就一目了然了:我们原本想要使用#include<WinSock2.h>头文件下的bind函数,结果却由于作用域的冲突造成

      bind函数变成了std下的函数。

    然后,进一步提出更优解:

    不要随意的使用

    using namespace std;

    而应该这样使用

    std::cout<<x<<std::endl

    这样的话就不容易造成作用域冲突,而且也比在bind函数前加::要更加严谨。

    证据如图:

    ******整篇文章就结束啦,希望这篇文章能够给小伙伴们提供一丁点帮助******

    Thanks for your reading 

  • 相关阅读:
    Linux 查看磁盘读写速度IO使用情况
    Kubernete安装
    jenkins问题解决
    Jenkins用HTTP Request Plugin插件进行网站的监控/加探针(运维监控)
    golang信号signal的处理
    修改docker仓库资源的地址
    centos7修改hostname
    同步CentOS时间
    CentOs查那个目录占空间大
    CentOS7主机名的修改
  • 原文地址:https://www.cnblogs.com/jiguang321/p/10465012.html
Copyright © 2011-2022 走看看