int main()
{
   void swap(int &,int &);  // 这里不对吧,函数声明能放在函数内部吗?
   int a=3,b=5;
   swap(a,b);
   cout<<"a="<<a<<"b="<<b<<endl;
   return 0;
}应该是这样吧void swap(int &,int &);int main()
{
   int a=3,b=5;
   swap(a,b);
   cout<<"a="<<a<<"b="<<b<<endl;
   return 0;
}

解决方案 »

  1.   

    你调试一下,如果是这样:int main()
    {
       void swap(int &,int &);  
       int a=3,b=5;
       swap(a,b);   // 这个函数根本没有执行
       cout<<"a="<<a<<"b="<<b<<endl;
       return 0;
    }
      

  2.   

    #include<Iostream>
    using namespace std;
    int main()
    {
    void swap(int &,int &);
    int a=3,b=5;
    swap(a,b);
    cout<<"a="<<a<<"b="<<b<<endl;
    return 0;
    }void swap(int & i,int & j)
    { cout<<"sssssssssssssssss";
    }
      

  3.   

    wntd2005  你是用VC  编译执行的吗?
      

  4.   

    covsno() 像你这样的话,sssssssssss不显示好像。
      

  5.   

    应该是这样的:
    #include<Iostream>
    using namespace std;void swap(int &,int &);
    int main()
    {   int a=3,b=5;
       swap(a,b);
       cout<<"a="<<a<<"b="<<b<<endl;
       return 0;
    }void swap(int & i,int & j)
    {
            int temp;
            temp=i;
            i=j;
            j=temp;
    }
      

  6.   

    covsno() 像你这样的话,sssssssssss不显示好像。不显示就对了,说明swap函数根本没执行
      

  7.   

    或者这样也行:
    #include<Iostream>
    using namespace std;
    int main()
    {
       //void swap(int &,int &);把这一行去掉!
       int a=3,b=5;
       swap(a,b);
       cout<<"a="<<a<<"b="<<b<<endl;
       return 0;
    }void swap(int & i,int & j)
    {
            int temp;
            temp=i;
            i=j;
            j=temp;
    }
      

  8.   

    int main()
    {
       void swap(int &,int &);  // 这个声明是合法的,
       int a=3,b=5;
       swap(a,b);
       cout<<"a="<<a<<"b="<<b<<endl;
       return 0;
    }虽然声明合法,但是它的使用域仅在main函数内,并不能正确指示main之外的swap(),所以不会调用期望的swap.
      

  9.   

    而函数部再次定义函数必定非法。参看《C++ program language》
      

  10.   

    quote lisunlin0(李林) 大虾的说法:
     int main()
    {
       void swap(int &,int &);  // 这个声明是合法的,
       int a=3,b=5;
       swap(a,b);
       cout<<"a="<<a<<"b="<<b<<endl;
       return 0;
    }虽然声明合法,但是它的使用域仅在main函数内,并不能正确指示main之外的swap(),所以不会调用期望的swap.
    --------   我怎么理解都觉得这句话是自相矛盾的,照你的说法,不能正确指示main之外的swap(),所以不会调用期望的swap.那
    int main()
    {
       void swap(int &,int &);  // 这个声明是合法的,
       int a=3,b=5;
       swap(a,b);   // 这里不算是main函数之内啊?如果不算,怎么才叫main之内
       cout<<"a="<<a<<"b="<<b<<endl;  
       return 0;
    }    不能判断你的说法是正确或者错误,但觉得你的说法不够严谨!
      

  11.   

    呵呵,再认真看了一次,明白了lisunlin0(李林) 大虾的说法,他的意思是说
    假如在main()函数内声明一个函数,就必须在main()函数内定义,否则不能引用在外部定义的函数,而在函数内再次定义函数是非法的。
      

  12.   

    这个与编译器查找函数和变量的顺序有关,编译器首先在函数的内部查找函数或变量,然后才是整个的类中;这个也就是为什么当定义一个全局的变量,然后再在函数的内部声明一个同名的变量,这样函数在使用过程中其实使用的是局部的变量,而不是全局的。
       所以LZ在main()内部其实调用的是swap(),而注释之后,则在函数内部没有查找到,那么就只好在类中查找,可以查找到,所以就调用了。
      

  13.   

    注释掉以后,连声明都没有了,还能通过编译?
    找一个存在BUG的编译器去研究问题,研究出来的结果也未必正确……
      

  14.   

    int main()
    {
       int a=3,b=5;
       swap(a,b);
       cout<<"a="<<a<<"b="<<b<<endl;
       return 0;
    }
      

  15.   

    问题很简单,这样改吧:
    #include<Iostream>
    using namespace std;void Myswap(int & i,int & j)
    {
            int temp;
            temp=i;
            i=j;
            j=temp;
    }int main()
    {
       int a=3,b=5;
       Myswap(a,b);
       cout<<"a="<<a<<"b="<<b<<endl;
       return 0;
    }
      

  16.   

    &在C++里是一种引用,而不是址传递。正确的方法是
    #include<Iostream>
    using namespace std;
    void swap(int *i,int *j);
    int main()
    {
       
       int a=3,b=5;
       swap(&a,&b);
       cout<<"a="<<a<<"b="<<b<<endl;
       return 0;
    }void swap(int *i,int *j)
    {
            int temp;
            temp=*i;
            *i=*j;
            *j=temp;
    }
      

  17.   

    int main()
    {
       void swap(int &,int &);  // 这个声明是合法的,
       int a=3,b=5;
       swap(a,b);
       cout<<"a="<<a<<"b="<<b<<endl;
       return 0;
    }虽然声明合法,但是它的使用域仅在main函数内,并不能正确指示main之外的swap(),所以不会调用期望的swap.
    lisunlin0(李林)说的有一定道理,函数是可以在另一个函数内部声明的,但不能在另一个函数内部定义。而声明后的作用域并不仅仅在main函数内,对于这个CPP程序,它的作用域应该是在声明的地方开始到程序结束为止。可能是跟具体的操作系统和编译器有关,在我的PC上运行就没有错,结果是a=5b=3。不过我的VC对"using namespace std"就报错了,呵呵