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

Đề tài: Cách gọi hàm cho 2 class

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

    Exclamation Cách gọi hàm cho 2 class

    E có 2 class DateType và Zodiac . E muốn gọi hàm z= getZodiac(dt.day, dt.month) từ class Zodiac sang hàm DateType nhưng nó báo là not declared. Làm sao để connect 2 hàm này?

    Với cả khai báo char* DateType::getMonth(int month) , thì nó ko nhận đc.



    DateType.h

    Code:
    #include <iostream>
    #include <cstring>
    #include <cctype> //character handling function
    #include <iomanip>
    
    using namespace std;
    
    
    
    const int MAX =50;
    
    
    class DateType
    {
        friend ostream& operator<<(ostream&, const DateType&);
        friend istream& operator>>(istream&,  DateType&);
    
        public:
        //Default constructor
        DateType();
    
        //Another constructor
        DateType(int,int,int);
    
        //Destructor
    
        ~DateType();
    
        //Other functions
    	
        //Overloaded Operators
    
    
        //Accessor
        int getDay() const;
        int getMonth() const;
        int getYear() const;
        //Muatator
        void set(int,int,int);
    
        private:
            int day;
    		int month;
    		int year;
    	char* getMonth(int);
    
    };
    DateType.cpp

    Code:
    #include "DateType.h"
    
    
    
    ostream& operator<< (ostream& os, const DateType& dt)
    {
        char *m = new char[MAX];
    	char *z = new char[MAX];
    	
        m = getMonth(dt.month);
    	
    	z= getZodiac(dt.day, dt.month);
    	
    	if(dt.day<10 )
    	os <<z<<" "<<"0"<<dt.day<<" "<<m<<" "<<dt.year+2000;
    	
    	else if (dt.year>1000)
    	os <<z<<" "<<dt.day<<" "<<m <<" " <<dt.year;
    	
    	else if (dt.day<10 && dt.year>1000)
    	os <<z<<" "<<"0"<<dt.day<< " "<<m<<" "<<dt.year;
    	
    	else	 	  
        os <<z<<" "<<dt.day <<" "<<m<<" "<<dt.year+2000;
    	
    
        delete []m;
    	delete []z;
        return os;
    }
    
    // format input day-month-year
    istream& operator>> (istream& is, DateType& dt)
    {
        char hyphen;
        is >> dt.day;
        is >> hyphen;    //To read and discard
        is >> dt.month;
        is >> hyphen;
        is >> dt.year;
    
        return is;
    }
    
    
    // Default constructor
    DateType::DateType()
    {
        day = 1;
        month = 1;
        year = 0;
    }
    
    // Another constructor
    DateType::DateType(int day, int month, int year)
    {
        this ->day = day;
        this ->month = month;
        this ->year = year;
    }
    
    // Destructor
    DateType::~DateType()
    {
        //Let the compiler to do it.
    }
    
    //Accessor
    
    int DateType::getDay() const
    {
        return day;
    }
    
    int DateType::getMonth() const
    {
        return month;
    }
    
    int DateType::getYear() const
    {
        return year;
    }
    
    // Muatator
    
    void DateType::set(int day, int month, int year)
    {
        this -> day = day;
        this -> month = month;
        this -> year = year;
    }
    
    
    
    
    
    
    char* DateType::getMonth(int month)
    {
        char *m = new char[50];
        switch(month)
        {
            case 1: strcpy(m,"January");
                    break;
            case 2: strcpy(m,"February");
                    break;
            case 3: strcpy(m,"March");
                    break;
            case 4: strcpy(m,"April");
                    break;
            case 5: strcpy(m,"May");
                    break;
            case 6: strcpy(m,"June");
                    break;
            case 7: strcpy(m,"July");
                    break;
            case 8: strcpy(m,"August");
                    break;
            case 9: strcpy(m,"September");
                    break;
            case 10:strcpy(m,"October");
                    break;
            case 11:strcpy(m,"November");
                    break;
            case 12:strcpy(m,"December");
                    break;
        }
        return m;
    }

    ZOdiac.h

    Code:
    #include "DateType.h"
    
    
    class Zodiac 
    {
    	public:
    		//	Constructor
    		Zodiac();
    		Zodiac(DateType);
    		~Zodiac();
    		
    		char *getZodiac(int,int);
    	private:
    		DateType dt;
    		
    
    };
    Code:
    #include "Zodiac.h"
    
    
    
    Zodiac::Zodiac ()
    {
    }
    
    Zodiac::Zodiac(DateType dt)
    {
    	this ->dt =dt;
    	
    }
    
    Zodiac::~Zodiac()
    {
    	//Let the compiler to do it
    
    }
    
    char* Zodiac::getZodiac( int day, int month)
    {
    	char *z = new char [MAX];
    		
    	if(( day >= 20 && month == 1 ) || ( day <= 18 && month == 2 ) )
    		strcpy(z,"Aquarius");
    		
    	else if(( day >= 19 && month == 2 ) || ( day <= 20 && month == 3 ) )
    		strcpy(z,"Pisces");
    		
    	else if(( day >= 21 && month == 3 ) || ( day <= 20 && month == 4 ) )
    		strcpy(z,"Aries");
    		
    	else if(( day >= 21 && month == 4 ) || ( day <= 20 && month == 5 ) )
    		strcpy(z,"Taurus");
    		
    	else if(( day >= 21 && month == 5 ) || ( day <= 20 && month == 6 ) )
    		strcpy(z,"Gemini");
    		
    	else if(( day >= 21 && month == 6 ) || ( day <= 20 && month == 7 ) )
    		strcpy(z,"Cancer");
    		
    	else if(( day >= 21 && month == 7 ) || ( day <= 20 && month == 8 ) )
    		strcpy(z,"Leo");
    		
    	else if(( day >= 21 && month == 8 ) || ( day <= 20 && month == 9 ) )
    		strcpy(z,"Virgo");
    		
    	else if(( day >= 21 && month == 9 ) || ( day <= 20 && month == 10 ) )
    		strcpy(z,"Libra");
    		
    	else if(( day >= 21 && month == 10 ) || ( day <= 20 && month == 11 ) )
    		strcpy(z,"Scorpio");
    		
    	else if(( day >= 21 && month == 11 ) || ( day <= 20 && month == 12 ) )
    		strcpy(z,"Sagittarius");
    	else
    		strcpy(z,"Capricorn");
    	
    	return z;
    		
    	
    }

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

    Ai giúp mình với

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

    Muốn gội hàm của một lớp thì phải gọi qua một đói tượng lớp hoặc gọi qua tên lớp nếu là hàm static.

    Hàm của bạn viết bị memory leak tùm lum!

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

    Bạn chỉ rõ hơn đc ko?

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

    Gọi hàm: Lật sách giáo khoa ra học lại về lớp và LTHĐT
    Memory leak: Lật sách giáo khoa ra học lại về cách sử dụng lệnh new

    Chỉ dẫn vài trang ở đây cũng không thể bằng sách.

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

  1. Mã nguồn C Lỗi Lỗi see reference to class template instantiation 'std::list<_Ty>' being khi sử dụng Iterator cho class tự xây dựng
    Gửi bởi Mr_Chan 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: 10-07-2013, 01:58 AM
  2. 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
  3. Cách lấy giá trị biến từ class này sang class khác trong lập trình C#
    Gửi bởi phongk20 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 13-03-2011, 05:19 PM
  4. Truy cập biến từ class này sang class kia xin giúp
    Gửi bởi baotran trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 02-12-2010, 09:20 AM
  5. Tại sao có struct rồi còn sinh ra class. Lợi thế của class là gì?
    Gửi bởi car0ot trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 24
    Bài viết cuối: 24-10-2008, 05:26 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