Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » C++ » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen C++
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Intel33
unregistriert
C++ Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

bei der b) habe ich probleme:

b) Überladen Sie (mit einer Methode) den operator-, so dass Sie die Differenz zweier Objekte vom Typ CJulianDate bilden können. Der Operator liefert die Differenz der Attribute m_days (als long).
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:

#ifndef MYCODE_CJULIANDATE_H_
#define MYCODE_CJULIANDATE_H_

#include <string>
#include<iostream>
using namespace std;

/**
 * Diese Klasse repräsentiert ein Julianisches Datum ohne Uhrzeit.
 */
class CJulianDate {
private:
	long m_days;

	/**
	 * Formatiert die übergebene Tagesnummer (1-31) wie folgt: Ist die Zahl
	 * einstellig, wird ein Leerzeichen vorangestellt (3 --> " 3"). Stimmt
	 * die Zahl mit dem Tag des von diesem Objekt repräsentierten
	 * gregorianischen Datums überein, wird das Ergebnis mit eckigen
	 * Klammern umgeben ("10" --> "[10]"), sonst werden am Anfang und
	 * am Ende je ein Leerzeichen ergänzt ("10" --> " 10 ").
	 */
	std::string formatDayNumber (short day) const;

public:
	/**
	 * Erzeugt ein neues Objekt mit dem angegebenen Julianischen Datum.
	 */
	CJulianDate(long date = 0);

	/**
	 * Erzeugt ein neues Objekt, dessen Wert aus dem angegebene Gregorianische Datum
	 * berechnet wird.
	 *
	 * - year: das Jahr
	 * - month: der Monat (Januar = 1)
	 * - day: der Tag (erster Tag eines Monats: 1)
	 */
	CJulianDate(int year, short month, short day);

	/**
	 * Liefert das Julianische Datum (Tage seit dem 1. Januar -4712 (4713 v. Chr)).
	 */
	long getJulianDate() const;

	/**
	 * Übernimmt das angegebene Julianische Datum.
	 */
	void setJulianDate(long date);

	/**
	 * Liefert den aktuallen Wert als Gregorianisches Datum.
	 *
	 * - year: das Jahr
	 * - month: der Monat (Januar = 1)
	 * - day: der Tag (erster Tag eines Monats: 1)
	 */
	void toGregorianDate(int& year, short& month, short& day) const;

	/**
	 * Konvertiert und übernimmt das angegebene Gregorianische Datum.
	 *
	 * - year: das Jahr
	 * - month: der Monat (Januar = 1)
	 * - day: der Tag (erster Tag eines Monats: 1)
	 */
	void fromGregorianDate(int year, short month, short day);

	/**
	 * Liefert den Wochentag zu dem aktuellen Datum (Montag = 1).
	 */
	int dayOfWeek() const;

	/**
	 * Liefert den Namen des Wochentags zu dem aktuellen Datum (Montag = 1).
	 */
	std::string dayOfWeekAsName() const;

	/**
	 * Addiert die angegebene Anzahl Tage zu diesem Julianischen Datum hinzu.
	 */
	CJulianDate& operator+= (long days) {
		m_days += days;
		return *this;
	}

	long operator-(const CJulianDate& other) ;

	/**
	 * Vergleicht zwei Julianische Daten und liefert true, wenn das als
	 * linker Operand angegebene Datum vor dem als rechter Operand
	 * angegebenen liegt.
	 */
	bool operator< (const CJulianDate& rhs) const;
	friend ostream& operator << (ostream& lop, const CJulianDate& rhs);

};

#endif /* MYCODE_CJULIANDATE_H_ */


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:

/*
 * CJulianDate.cpp
 *
 *  Created on: 02.02.2017
 *      Author: mnl
 */

#include "CJulianDate.h"
#include <cstdio>

//===============================================
// Ergänzen Sie Ihren Code am Ende dieser Datei!
//===============================================

CJulianDate::CJulianDate(long date) {
    m_days = date;
}

CJulianDate::CJulianDate(int year, short month, short day) {
    fromGregorianDate(year, month, day);
}

long CJulianDate::getJulianDate() const {
    return m_days;
}

void CJulianDate::setJulianDate(long date) {
    m_days = date;
}

void CJulianDate::toGregorianDate(int& year, short & month, short & day) const {
    long i, j, k, l, n;

    l = m_days + 68569;
    n = 4 * l / 146097;
    l = l - (146097 * n + 3) / 4;
    i = 4000 * (l + 1) / 1461001;
    l = l - 1461 * i / 4 + 31;
                                                                                                                                         j = 80 * l / 2447;
    k = l - 2447 * j / 80;
    l = j / 11;
    j = j + 2 - 12 * l;
    i = 100 * (n - 49) + i + l;

    year = i;
    month = j;
    day = k;
}

void CJulianDate::fromGregorianDate(int year, short month, short day) {
    m_days = day - 32075 + 1461 * (year + 4800 + (month - 14) / 12) / 4
            + 367 * (month - 2 - (month - 14) / 12 * 12) / 12
            - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4;
}

int CJulianDate::dayOfWeek() const {
    return (m_days % 7) + 1;
}

std::string CJulianDate::dayOfWeekAsName() const {
    switch (dayOfWeek()) {
    case 1:
        return "Montag";
    case 2:
        return "Dienstag";
    case 3:
        return "Mittwoch";
    case 4:
        return "Donnerstag";
    case 5:
        return "Freitag";
    case 6:
        return "Samstag";
    case 7:
        return "Sonntag";
    default:
        return "(Fehler)";
    }
}

std::string CJulianDate::formatDayNumber(short day) const {
    char buffer[5];
    int year;
    short month;
    short refDay;

    toGregorianDate(year, month, refDay);
    sprintf(buffer, day == refDay ? "[%2d]" : " %2d ", day);
    return std::string(buffer);
}

bool CJulianDate::operator <(const CJulianDate& rhs) const {
    return m_days < rhs.m_days;
}

//=====================================================
// Ergänzen Sie Ihren Code unterhalb dieses Kommentars
//=====================================================



ostream& operator << (ostream& lop, const CJulianDate& rhs){
    short day, month;
        int year;
        rhs.toGregorianDate(year, month, day);
        lop<< rhs.dayOfWeekAsName() << ", " << day << "." << month << "." << year << std::endl;
        return lop;

}

long operator-(const CJulianDate& other) {
    return this.m_days - other.m_days;
}




Description Resource Path Location Type
'long int CJulianDate::m_days' is private within this context CJulianDate.cpp /CJulianDate line 113 C/C++ Problem
Field 'm_days' could not be resolved CJulianDate.cpp /CJulianDate line 113 Semantic Error
invalid use of 'this' in non-member function CJulianDate.cpp /CJulianDate line 113 C/C++ Problem
declared private here CJulianDate.h /CJulianDate line 20 C/C++ Problem


Bitte um Hilfe

Intel33 hat dieses Bild (verkleinerte Version) angehängt:
1.png

24.05.2017 14:59
Intel33
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Habe im Header ein friend hinzugefügt ,aber trotzdem Fehlermeldung bei Eclipse?
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
* CJulianDate.h
 *
 *  Created on: 02.02.2017
 *      Author: mnl
 */

#ifndef MYCODE_CJULIANDATE_H_
#define MYCODE_CJULIANDATE_H_

#include <string>
#include<iostream>
using namespace std;

/**
 * Diese Klasse repräsentiert ein Julianisches Datum ohne Uhrzeit.
 */
class CJulianDate {
private:
	long m_days;

	/**
	 * Formatiert die übergebene Tagesnummer (1-31) wie folgt: Ist die Zahl
	 * einstellig, wird ein Leerzeichen vorangestellt (3 --> " 3"). Stimmt
	 * die Zahl mit dem Tag des von diesem Objekt repräsentierten
	 * gregorianischen Datums überein, wird das Ergebnis mit eckigen
	 * Klammern umgeben ("10" --> "[10]"), sonst werden am Anfang und
	 * am Ende je ein Leerzeichen ergänzt ("10" --> " 10 ").
	 */
	std::string formatDayNumber (short day) const;
public:

	/**
	 * Erzeugt ein neues Objekt mit dem angegebenen Julianischen Datum.
	 */
	CJulianDate(long date = 0);



	/**
	 * Erzeugt ein neues Objekt, dessen Wert aus dem angegebene Gregorianische Datum
	 * berechnet wird.
	 *
	 * - year: das Jahr
	 * - month: der Monat (Januar = 1)
	 * - day: der Tag (erster Tag eines Monats: 1)
	 */
	CJulianDate(int year, short month, short day);

	/**
	 * Liefert das Julianische Datum (Tage seit dem 1. Januar -4712 (4713 v. Chr)).
	 */
	long getJulianDate() const;

	/**
	 * Übernimmt das angegebene Julianische Datum.
	 */
	void setJulianDate(long date);

	/**
	 * Liefert den aktuallen Wert als Gregorianisches Datum.
	 *
	 * - year: das Jahr
	 * - month: der Monat (Januar = 1)
	 * - day: der Tag (erster Tag eines Monats: 1)
	 */
	void toGregorianDate(int& year, short& month, short& day) const;

	/**
	 * Konvertiert und übernimmt das angegebene Gregorianische Datum.
	 *
	 * - year: das Jahr
	 * - month: der Monat (Januar = 1)
	 * - day: der Tag (erster Tag eines Monats: 1)
	 */
	void fromGregorianDate(int year, short month, short day);

	/**
	 * Liefert den Wochentag zu dem aktuellen Datum (Montag = 1).
	 */
	int dayOfWeek() const;

	/**
	 * Liefert den Namen des Wochentags zu dem aktuellen Datum (Montag = 1).
	 */
	std::string dayOfWeekAsName() const;

	/**
	 * Addiert die angegebene Anzahl Tage zu diesem Julianischen Datum hinzu.
	 */
	CJulianDate& operator+= (long days) {
		m_days += days;
		return *this;
	}

	long operator-(const CJulianDate& other) ;

	/**
	 * Vergleicht zwei Julianische Daten und liefert true, wenn das als
	 * linker Operand angegebene Datum vor dem als rechter Operand
	 * angegebenen liegt.
	 */
	bool operator< (const CJulianDate& rhs) const;
	friend ostream& operator << (ostream& lop, const CJulianDate& rhs);
	friend long operator-(const CJulianDate& other) ;


};

#endif /* MYCODE_CJULIANDATE_H_ */



cpp
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:

* CJulianDate.cpp
 *
 *  Created on: 02.02.2017
 *      Author: mnl
 */

#include "CJulianDate.h"
#include <cstdio>

//===============================================
// Ergänzen Sie Ihren Code am Ende dieser Datei!
//===============================================

CJulianDate::CJulianDate(long date) {
	m_days = date;
}

CJulianDate::CJulianDate(int year, short month, short day) {
	fromGregorianDate(year, month, day);
}

long CJulianDate::getJulianDate() const {
	return m_days;
}

void CJulianDate::setJulianDate(long date) {
	m_days = date;
}

void CJulianDate::toGregorianDate(int& year, short & month, short & day) const {
	long i, j, k, l, n;

	l = m_days + 68569;
	n = 4 * l / 146097;
	l = l - (146097 * n + 3) / 4;
	i = 4000 * (l + 1) / 1461001;
	l = l - 1461 * i / 4 + 31;
                                                                                                                                     	j = 80 * l / 2447;
	k = l - 2447 * j / 80;
	l = j / 11;
	j = j + 2 - 12 * l;
	i = 100 * (n - 49) + i + l;

	year = i;
	month = j;
	day = k;
}

void CJulianDate::fromGregorianDate(int year, short month, short day) {
	m_days = day - 32075 + 1461 * (year + 4800 + (month - 14) / 12) / 4
			+ 367 * (month - 2 - (month - 14) / 12 * 12) / 12
			- 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4;
}

int CJulianDate::dayOfWeek() const {
	return (m_days % 7) + 1;
}

std::string CJulianDate::dayOfWeekAsName() const {
	switch (dayOfWeek()) {
	case 1:
		return "Montag";
	case 2:
		return "Dienstag";
	case 3:
		return "Mittwoch";
	case 4:
		return "Donnerstag";
	case 5:
		return "Freitag";
	case 6:
		return "Samstag";
	case 7:
		return "Sonntag";
	default:
		return "(Fehler)";
	}
}

std::string CJulianDate::formatDayNumber(short day) const {
	char buffer[5];
	int year;
	short month;
	short refDay;

	toGregorianDate(year, month, refDay);
	sprintf(buffer, day == refDay ? "[%2d]" : " %2d ", day);
	return std::string(buffer);
}

bool CJulianDate::operator <(const CJulianDate& rhs) const {
	return m_days < rhs.m_days;
}

//=====================================================
// Ergänzen Sie Ihren Code unterhalb dieses Kommentars
//=====================================================



ostream& operator << (ostream& lop, const CJulianDate& rhs){
	short day, month;
		int year;
		rhs.toGregorianDate(year, month, day);
		lop<< rhs.dayOfWeekAsName() << ", " << day << "." << month << "." << year << std::endl;
		return lop;

}

long operator-(const CJulianDate& other) {
    return m_days - other.m_days;
}






Fehler

Description Resource Path Location Type
'm_days' was not declared in this scope CJulianDate.cpp /CJulianDate line 113 C/C++ Problem
Symbol 'm_days' could not be resolved CJulianDate.cpp /CJulianDate line 113 Semantic Error
25.05.2017 09:49
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » C++