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

Đề tài: Lỗi với cin trong khi nhập ở class (error C2679: binary '>>'...)

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

    Mặc định Lỗi với cin trong khi nhập ở class (error C2679: binary '>>'...)

    Mấy hôm nay em ngôi viết nhưng mà cứ mắc mãi một lỗi như thế này, em không hiểu vì sao, mong các anh chị chỉ giùm cho em lỗi này, và lỗi này nên sửa thế nào...
    Em tạo lớp phân số
    có file PS.h
    Code:
    #pragma once
    
    ref class PS
    {
    private:
    	int tu,mau;
    public:
    	PS(void);
    	PS(int x, int y);
    	void nhap();
    	void hienthi();
    	int USCLN();
    	void rutgon();
    	PS operator+(PS b);
    	PS operator-(PS b);
    	PS operator*(PS b);
    	PS operator/(PS b);
    };
    tiếp theo là file PS.cpp
    Code:
    #include "PS.h"
    #include <stdio.h>
    #include <iostream>
    #include <conio.h>
    #include <math.h>
    using namespace std;
    
    PS::PS(void)
    {
    }
    PS::PS(int x,int y)
    {
    	tu=x;mau=y;
    }
    void PS::nhap()
    {
    	cout<<"\nNhap tu va mau: ";
    	cin>>tu>>mau;
    }
    void PS::hienthi()
    {
    	cout<<tu<<"/"<<mau;
    }
    int PS::USCLN()
    {
    	int a,b;
    	a=abs(tu);b=abs(mau);
    		while(a!=b)
    		{
    			if(a>b)
    				a=a-b;
    			else b=b-a;
    		}
    		return a;
    }
    void PS::rutgon()
    {
    	int a;
    	a=USCLN();
    	tu=tu/a;
    	mau=mau/a;
    }
    PS PS::operator+(PS b)
    {
    	PS a;
    	a.tu=((tu*b.mau)+(b.tu*mau));
    	a.mau=(mau*b.mau);
    	a.rutgon();
    	return a;
    }
    PS PS::operator-(PS b)
    {
    	PS a;
    	a.tu=((tu*b.mau)-(b.tu*mau));
    	a.mau=(mau*b.mau);
    	a.rutgon();
    	return a;
    }
    PS PS::operator*(PS b)
    {
    	PS a;
    	a.tu=tu*b.tu;
    	a.mau=mau*b.mau;
    	a.rutgon();
    	return a;
    }
    PS PS::operator/(PS b)
    {
    	PS a;
    	a.tu=tu*b.mau;
    	a.mau=mau*b.tu;
    	a.rutgon();
    	return a;
    }
    và một file cpp nữa để thực hiện hàm main
    Code:
    #include "PS.h"
    #include <iostream>
    #include <conio.h>
    #include <math.h>
    using namespace std;
    void main()
    {
    	PS a,b,c;
    	a.nhap();
    	b.nhap();
    	a.hienthi();
    	b.hienthi();
    	c=a+b;
    	c.hienthi();
    }
    khi biên dịch thì nó ra lỗi như sau:
    1>.\PS.cpp(19) : error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
    1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\istream(1144): could be 'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Ele m,_Traits> &,signed char *)'
    và thêm các lỗi này nữa:
    1>.\PS.cpp(50) : error C2440: 'return' : cannot convert from 'PS' to 'PS'
    1> Cannot copy construct class 'PS' due to ambiguous copy constructors or no available copy constructor
    1>.\PS.cpp(58) : error C2440: 'return' : cannot convert from 'PS' to 'PS'
    1> Cannot copy construct class 'PS' due to ambiguous copy constructors or no available copy constructor
    1>.\PS.cpp(66) : error C2440: 'return' : cannot convert from 'PS' to 'PS'
    1> Cannot copy construct class 'PS' due to ambiguous copy constructors or no available copy constructor
    1>.\PS.cpp(74) : error C2440: 'return' : cannot convert from 'PS' to 'PS'
    1> Cannot copy construct class 'PS' due to ambiguous copy constructors or no available copy constructor
    1>pso.cpp
    1>.\pso.cpp(13) : error C2679: binary '+' : no operator found which takes a right-hand operand of type 'PS' (or there is no acceptable conversion)
    1> c:\users\bui xuan hoang\documents\visual studio 2008\projects\pso\pso\PS.h(14): could be 'PS PS::operator +(PS)'
    1> while trying to match the argument list '(PS, PS)'
    "Trong khi đó em làm chúng chỉ gói gọn trong 1 file cpp thì lại đựoc..."

  2. #2
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    Bạn nên nhớ rằng chỉ thị #pragma once dùng để làm gì?
    Nó chỉ cho compiler biết rằng được include file đó (trường hợp này là PS.h) duy nhất 1 lần trong chương trình.
    Vì bạn include nó 2 lần nên mới quăng ra nhiều lỗi như thế.

  3. #3
    Ngày gia nhập
    04 2010
    Bài viết
    69

    Trích dẫn Nguyên bản được gửi bởi G.Perelman Xem bài viết
    Bạn nên nhớ rằng chỉ thị #pragma once dùng để làm gì?
    Nó chỉ cho compiler biết rằng được include file đó (trường hợp này là PS.h) duy nhất 1 lần trong chương trình.
    Vì bạn include nó 2 lần nên mới quăng ra nhiều lỗi như thế.
    Thế em nên dùng như thế nào cho đúng...anh chỉ rõ cho em để em biết lấn sau mà tránh. Chỉ cần xóa mỗi chỉ thị đó thôi hay là sao!

  4. #4
    Ngày gia nhập
    03 2011
    Nơi ở
    Hà Nội
    Bài viết
    89

    theo mình mấy lỗi convert ấy thì giá trị mà bạn trả vể phải là con trỏ this chứ bởi trong c++
    với hàm operator thì bên đối trái nó mặc định là con trỏ this mà

  5. #5
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Sao ko thấy include PS.cpp vào main thế ??
    Mà vì PS.cpp đã include PS.h rồi cho nên chỉ cần mỗi ps.cpp thôi . Cơ mà sao ko viết cả đống class đấy vào 1 cái PS.h thôi mà bày ra thêm PS.cpp viết riêng phần method làm gì ấy nhỉ

  6. #6
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    Mặc định Lỗi với cin trong khi nhập ở class (error C2679: binary '>>'...)

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Sao ko thấy include PS.cpp vào main thế ??
    Mà vì PS.cpp đã include PS.h rồi cho nên chỉ cần mỗi ps.cpp thôi . Cơ mà sao ko viết cả đống class đấy vào 1 cái PS.h thôi mà bày ra thêm PS.cpp viết riêng phần method làm gì ấy nhỉ
    Viết code chuyên nghiệp bao giờ người ta cũng làm thế bạn ạ

  7. #7
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Trích dẫn Nguyên bản được gửi bởi G.Perelman Xem bài viết
    Viết code chuyên nghiệp bao giờ người ta cũng làm thế bạn ạ
    Tiền bối phân tích cho mình với. Bởi trước h mình vẫn chưa mường tượng ra được sẽ phân rã chương trình thành nhiều file rồi include vào như thế nào .
    Tiền bối có link nào nói về cái này thì quăng cho mình 1 phát hoặc là nhiệt tình hơn thì chỉ bảo tại đây lun Cụ thể với bài đấy thì vì sao nên phân thành như vậy

  8. #8
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    Bạn có thể tham khảo "Phong cách lập trình C++" tại đây: http://kithuatlaptrinh.tk/tai-lieu-g...-lap-trinh-cpp

  9. #9
    Ngày gia nhập
    10 2011
    Bài viết
    46

    Bạn thêm vào cái header của PS dòng đầu
    C++ Code:
    1. #ifndef PS_H
    2. #define PS_H
    và dòng cuối
    C++ Code:
    1. #endif
    Và đoạn này:
    C++ Code:
    1. ref class PS
    Thằng "ref" này không hiểu ở đâu ra

  10. #10
    Ngày gia nhập
    04 2010
    Bài viết
    69

    Uh đúng rồi...không cần thêm mà chỉ cần bỏ dòng chỉ thị như một vài bạn đầu nói và bỏ luôn cái dong ref mà bạn vừa chỉ ra...nguyên nhân thì như mấy bạn ban đầu đã chỉ ra là do cái dòng chỉ thị đó chỉ cho phép khai báo hàm include duoc một lần.

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

  1. Lỗi: error C2440: 'initializing' : cannot convert from 'class xxx *' to 'class xxx *' sửa như thế nào?
    Gửi bởi Nupakachy trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 16-06-2011, 08:54 PM
  2. Cách nhập dữ liệu kiểu binary và text trong SQL?
    Gửi bởi hoangmanhtung23 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 1
    Bài viết cuối: 30-04-2011, 06:16 PM
  3. Array Kiểu VECTOR error C2679: binary '<<' : no operator found
    Gửi bởi nndung179 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 18-11-2010, 02:58 PM
  4. error C2679: binary '<<' : no operator defined which takes a right-hand operand
    Gửi bởi hunter_hikaru trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 17
    Bài viết cuối: 21-02-2009, 06:09 PM
  5. [VC++ 2005] Error C2679 ! ?
    Gửi bởi dellogvn trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 07-01-2007, 07:34 PM

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