Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: C++ template( ko hiểu sai chỗ nào)!!

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    12

    Wink C++ template( ko hiểu sai chỗ nào)!!

    mình ko bit sai chỗ nào mà chương trình cứ báo lỗi,ko chạy đc!

    Code:
    #include<iostream>
    #include<string>
    using namespace std;
    
    template <class T>
    void swap(T& x,T& y)
    {
         T temp;
         temp=x;
         x=y;
         y=temp;
    }
    int main()
    {
       int a=44 ;
       int b=66 ;
       double s=4.4;
       double t=6.6;
       string mr="George";
       string ms="Martha";
       cout<<"Before swap a: "<<a<<" b: "<<b<<endl;
       swap(a,b);
       cout<<"After swap a: "<<a<<" b: "<<b<<endl;
       cout<<"Before swap s: "<<s<<" t: "<<t<<endl;
       swap( s, t );
       cout<<"After swap s: "<<s<<" t: "<<t<<endl;
       
       cout<<"Before swap mr: "<<mr<<" ms: "<<ms<<endl; 
       swap(mr,ms);
       cout<<"After swap mr: "<<mr<<" ms: "<<ms<<endl;
    system("pause");
    return 0;
    }
    Báo lỗi như sau:
    'swap' : none of 2 overload have a best conversion
    'swap' : ambiguous call to overloaded function


    anh em giải đáp giùm mình thanks nhìu...

  2. #2
    Ngày gia nhập
    09 2007
    Bài viết
    724

    đơn giản là trong std có hàm swap.
    đổi lại tên hàm đi là ok thôi .

    C++ Code:
    1.  
    2. #include<iostream>
    3. #include<string>
    4. using namespace std;
    5.  
    6. template <class T>
    7. void MySwap(T& x,T& y)
    8. {
    9.      T temp;
    10.      temp=x;
    11.      x=y;
    12.      y=temp;
    13. }
    14. int main()
    15. {
    16.     int ff=3,aa = 2;
    17.     std::swap(ff,aa);
    18.    int a=44 ;
    19.    int b=66 ;
    20.    double s=4.4;
    21.    double t=6.6;
    22.    string mr="George";
    23.    string ms="Martha";
    24.    cout<<"Before swap a: "<<a<<" b: "<<b<<endl;
    25.    MySwap(a,b);
    26.    cout<<"After swap a: "<<a<<" b: "<<b<<endl;
    27.    cout<<"Before swap s: "<<s<<" t: "<<t<<endl;
    28.    MySwap( s, t );
    29.    cout<<"After swap s: "<<s<<" t: "<<t<<endl;
    30.    
    31.    cout<<"Before swap mr: "<<mr<<" ms: "<<ms<<endl;
    32.    swap(mr,ms);
    33.    cout<<"After swap mr: "<<mr<<" ms: "<<ms<<endl;
    34. system("pause");
    35. return 0;
    36. }

  3. #3
    Ngày gia nhập
    09 2008
    Bài viết
    28

    Mình nghĩ bạn dùng hàm swap() là hàm đã có sẵn nên không được. Bạn chỉ cần đổi tên nó lại là "Swap" thì sẽ ổn thôi.
    Í không ngờ mình chậm chân hơn bạn Zkday rồi, nên post trùng ý.
    Đã được chỉnh sửa lần cuối bởi thichgame : 28-11-2008 lúc 01:12 AM.

  4. #4
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Bỏ cái using namespace std; đi, viết demo thì bỏ vào không sao nhưng đã viết thực sự thì không nên dùng global namespace
    C++ Code:
    1. #include <iostream>
    2. #include <string>
    3.  
    4. using std::string;
    5. using std::cout;
    6. using std::endl;
    7.  
    8. template< typename T >
    9. void swap( T& x, T& y )
    10. {
    11.     T temp;
    12.     temp = x;
    13.     x    = y;
    14.     y    = temp;
    15. }
    16.  
    17.  
    18. int main()
    19. {
    20.     int a=44 ;
    21.     int b=66 ;
    22.     double s=4.4;
    23.     double t=6.6;
    24.     string mr = "George";
    25.     string ms = "Martha";
    26.  
    27.     cout<<"Before swap a: "<<a<<" b: "<<b<<endl;
    28.     swap(a,b);
    29.     cout<<"After swap a: "<<a<<" b: "<<b<<endl;
    30.     cout<<"Before swap s: "<<s<<" t: "<<t<<endl;
    31.     swap( s, t );
    32.     cout<<"After swap s: "<<s<<" t: "<<t<<endl;
    33.  
    34.     cout<<"Before swap mr: "<<mr<<" ms: "<<ms<<endl;
    35.     swap(mr,ms);
    36.     cout<<"After swap mr: "<<mr<<" ms: "<<ms<<endl;
    37.  
    38.     return 0;
    39. }

  5. #5
    Ngày gia nhập
    04 2008
    Bài viết
    12

    à há thanks nhìu nghen.....:X :X

  6. #6
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Mặc định C++ template( ko hiểu sai chỗ nào)!!

    truy xuất global swap của cậu là xong thôi mà

    thay vì swap() => ::swap()

    xác định rõ scope để mà truy xuất hàm cho hợp lý tránh ambiguous
    None!

Các đề tài tương tự

  1. Lập trình C++ template là gì? sử dụng template như thế nào?
    Gửi bởi dangvanhoavc trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 16-01-2013, 09:11 PM
  2. Kỹ thuật C++ Template Method có liên quan gì đến template trong C++ ko?
    Gửi bởi ten_truycap trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 22-10-2010, 11:26 PM
  3. Cách xây dựng và sử dụng template và mảng template trong C++?
    Gửi bởi nhatnha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 03-08-2010, 06:24 PM
  4. template
    Gửi bởi wawa trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 10-01-2009, 07:36 PM
  5. Cho em hỏi về Template
    Gửi bởi piglet trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 23-05-2008, 08:41 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn