Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Problem C++

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
09.08.2017, 10:47 Uhr
Alex33



Hallo alle zusammen .

Habe im Moment bei der g) mit der Print methode so meine Probleme.

Habe irgendwie das Gefühl das ich an die Grenzen meines Wissens gekommen bin .

Wie soll ich das ausgeben ?
Zeit: Dienstag, 14.2.2017

Ich habe es ein wenig probiert ,bin nicht sicher wie ich es machen soll?
Header

Ich poste es mal halbiert ,da alles nicht in einem gepostet werden kann.

C++:

  #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);
  
    CJulianDate(const CJulianDate& oldvariable);
  
    /**
     * 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;
    void prettyPrintMonth();
    /**
     * 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;
    }
  
  
    /**
     * 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);
    long operator-(const CJulianDate& other);
    void print();
  
  
};



 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.08.2017, 10:47 Uhr
Alex33




C++:
  

#include "CJulianDate.h"
#include <cstdio>
#include<iostream>
using namespace std;
#include "CCalendarEntry.h"
  
//===============================================
// 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 CJulianDate::operator-(const CJulianDate& other){
    return this->m_days -other.m_days;
}
void CJulianDate::prettyPrintMonth(){
    CJulianDate current = CJulianDate(*this);
    int year;
    short month;
    short day;
    short printMonth = month;
  
  
    current.toGregorianDate( year,  month,  day);
     current.fromGregorianDate(year,  month, 1);
     current.dayOfWeekAsName();
     current += -(current.dayOfWeek() - 1);
     current.toGregorianDate(year, month, day);
  
     while( month <= printMonth ){
         if(month <printMonth){
  
         cout << " " << " " << " " << " " << endl;
  
  
     }
     else {
  
         current.formatDayNumber(day);
     }
  
     if(current.dayOfWeekAsName() == "Sonntag" ){
         cout << endl;
  
     }
     current.operator +=(1);}
}
  
CJulianDate::CJulianDate(const CJulianDate& oldvariable){
  
    m_days = oldvariable.m_days;
}
  
void CJulianDate::print(){
  
    cout<< CJulianDate semesterBegin(2016,10,1) << " ," << CJulianDate semesterBegin(2017,14,2) <<CJulianDate semesterEnd(2017,3,31) << endl;
  
        cout << "Dauer::" << "182 Tage" <<  endl;
cout << "Zeit:" << m_days << " , " <<....... ?
  
cout << "Ort:" << m_location <<endl;
  
cout<< "Beschreibung:" << " " << "Git-Klausur" << endl;
  
  
    prettyPrintMonth();
  
  
  
}




C++:
#ifndef MYCODE_CCALENDARENTRY_H_
#define MYCODE_CCALENDARENTRY_H_

#include <string>
#include "CJulianDate.h"
  
class CCalendarEntry {
private:
    CJulianDate m_date;
    std::string m_location;
    std::string m_description;
  
public:
    /**
     * Setzt die Werte der Attribute f�r den Termin.
     *
     * Da der gregorianische Kalender erst am 15.10.1582 in Kraft trat, erfolgt
     * eine Plausibilit�tspr�fung (Zusicherung). Liegt das �bergebene Datum vor
     * dem 15.10.1582 werden die Daten nicht �bernommen (die Attribute bleiben
     * unver�ndert) und es wird "false" zur�ckgegeben.
     *
     * - date: das Datum
     * - location: der Ort
     * - description: die Beschreibung
     *
     * R�ckgabewert: true, wenn die Daten �bernommen wurden.
     */

    bool set(const CJulianDate& date, const std::string& location,
            const std::string& description);
  
    /**
     * Liefert das Datum, zu dem der Termin stattfindet.
     */

    const CJulianDate& getDate() const;
  
    /**
     * Liefert den Ort, an dem der Termin stattfindet.
     */

    const std::string& getLocation() const;
  
    /**
     * Liefert die Beschreibung des Termins.
     */

    const std::string& getDescription() const;
  
    /**
     * Gibt den Termin wie folgt auf der Konsole aus:
     *
     * Zeit: <Attribut m_date im gregorianischen Format>
     * Ort: <Attribut m_location>
     * Beschreibung: <Attribut m_description>
     */

    void print() const;
};

#endif /* MYCODE_CCALENDARENTRY_H_ */





C++:

#include <iostream>     // Header f�r die Standard-IO-Objekte (z.B. cout, cin)
#include <stdlib.h>
#include "CJulianDate.h"
// F�gen Sie hier weitere ben�tigte Header-Dateien der
// Standard-Bibliothek ein z.B.
// #include <string>
  
using namespace std;    // Erspart den scope vor Objekte der
                        // C++-Standard-Bibliothek zu schreiben
                        // z.B. statt "std::cout" kann man "cout" schreiben
  
// Inkludieren Sie hier die Header-Files Ihrer Klassen, z.B.
// #include "CFraction.h"
  
  
// Hauptprogramm
// Dient als Testrahmen, von hier aus werden die Klassen aufgerufen
int main (void)
{
    CJulianDate semesterBegin(2016,10,1);
    CJulianDate semesterEnd(2017,3,31);
}





C++:


/*
* CCalendarEntry.cpp
*
*  Created on: 04.02.2017
*      Author: mnl
*/


#include "CCalendarEntry.h"
#include <string>
#include<iostream>
using namespace std;
  
const std::string& CCalenderEntry::getLocation(){
  
    return m_location;
}



Fehlermeldungen:

Description Resource Path Location Type
die Regel für Ziel „CJulianDate/CCalenderEntry.o“ scheiterte subdir.mk /CJulianDate/Debug/CJulianDate line 24 C/C++ Problem
fatal error: CCalendarEntry.h: Datei oder Verzeichnis nicht gefunden CCalenderEntry.cpp /CJulianDate/CJulianDate line 16 C/C++ Problem
Function 'semesterBegin' could not be resolved CJulianDate.cpp /CJulianDate/CJulianDate line 158 Semantic Error
Function 'semesterBegin' could not be resolved CJulianDate.cpp /CJulianDate/CJulianDate line 158 Semantic Error
Function 'semesterEnd' could not be resolved CJulianDate.cpp /CJulianDate/CJulianDate line 158 Semantic Error
Invalid overload of 'endl' CJulianDate.cpp /CJulianDate/CJulianDate line 158 Semantic Error
make: *** [CJulianDate/CCalenderEntry.o] Fehler 1 CJulianDate C/C++ Problem
Member declaration not found CCalenderEntry.cpp /CJulianDate/CJulianDate line 21 Semantic Error

https://www.pic-upload.de/view-33685174/prog1.png.html
https://www.pic-upload.de/view-33685175/prog2.png.html

https://www.pic-upload.de/view-33685176/prog3.png.html

Dieser Post wurde am 09.08.2017 um 10:48 Uhr von Alex33 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.08.2017, 10:38 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,


Zitat:

fatal error: CCalendarEntry.h: Datei oder Verzeichnis nicht gefunden CCalenderEntry.cpp /CJulianDate/CJulianDate line 16 C/C++ Problem



Hier sagt dir der Compiler: "Oops, ich kann eine Datei nicht finden, welche du in CCalenderEntry.cpp inkludieren willst".
d.h:
Hast du deine Datei, in der die Klasse CCalendarEntry auch CCalendarEntry.h genannt?
Liegt sie im gleichen Ordner wie CCalenderEntry.cpp?


Zitat:

Function 'semesterBegin' could not be resolved CJulianDate.cpp /CJulianDate/CJulianDate line 158 Semantic Error
Function 'semesterBegin' could not be resolved CJulianDate.cpp /CJulianDate/CJulianDate line 158 Semantic Error
Function 'semesterEnd' could not be resolved CJulianDate.cpp /CJulianDate/CJulianDate line 158 Semantic Error



Hier sagt dir der Compiler (etwas missverständlich) das er die Symbole semesterBegin und semesterEnd nicht kennt (und denkt das sie Funktionen sind, wegen den Konstruktor-Argumenten)

Überlege mal, was denn eine "print" Methode einer Klasse den tun soll? (Tipp: z.B Den Inhalt des aktuellen Objekts ausgeben)

Naja les dir "prog1" Punkt c) nochmal genau durch: "... unter Verwendung von ..." und zwar in deiner "main"!
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.08.2017, 11:55 Uhr
Alex33



Ich habe jetzt mal die get implementiert ,aber es werden Fehler angezeigt ?

C++:
#include "CCalendarEntry.h"
#include <string>
#include<iostream>
using namespace std;

const string& CCalenderEntry::getLocation(){

    return m_location;
}

const CJulianDate& CCalenderEntry::getDate(){
    return m_date;
    
    
}
const string& CCalenderEntry::getDescription(){
    
    return m_description;
}



void bool set(const CJulianDate& date, const std::string& location,
            const std::string& description){
    if( toGregorianDate(int& year, short& month, short& day) < toGregorianDate(1582, 10, 15)){
        return false;
    }
    else if(toGregorianDate(int& year, short& month, short& day) >=toGregorianDate(1582, 10, 15))){
    m_date = date;
    m_location = location;
    m_description = description;
    return true;
}





Passt die Printh Methode jetzt ein wenig besser ?

C++:
// GIT-Labor
// main.h

////////////////////////////////////////////////////////////////////////////////
// Header-Dateien
#include <iostream>        // Header f�r die Standard-IO-Objekte (z.B. cout, cin)
#include <stdlib.h>
#include "CJulianDate.h"
// F�gen Sie hier weitere ben�tigte Header-Dateien der
// Standard-Bibliothek ein z.B.
// #include <string>

using namespace std;    // Erspart den scope vor Objekte der
                        // C++-Standard-Bibliothek zu schreiben
                        // z.B. statt "std::cout" kann man "cout" schreiben

// Inkludieren Sie hier die Header-Files Ihrer Klassen, z.B.
// #include "CFraction.h"


// Hauptprogramm
// Dient als Testrahmen, von hier aus werden die Klassen aufgerufen
int main (void)
{
    CJulianDate semesterBegin(2016,10,1);
    CJulianDate semesterEnd(2017,3,31);

    void CCalenderEntry::print(){

        cout<< CJulianDate semesterBegin(2016,10,1) << " ," << CJulianDate semesterBegin(2017,14,2) <<CJulianDate semesterEnd(2017,3,31) << endl;

            cout << "Dauer::" << "182 Tage" <<  endl;
     cout << "Zeit:" << m_days << " , " <<....... ?

     cout << "Ort:" << m_location <<endl;

     cout<< "Beschreibung:" << " " << "Git-Klausur" << endl;


        prettyPrintMonth();



    }
}



So werden die Fehler angezeigt:

https://www.pic-upload.de/view-33740655/code.png.html

Dieser Post wurde am 15.08.2017 um 11:56 Uhr von Alex33 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.08.2017, 17:48 Uhr
Tommix



Hallo,
vermutlich liegt es daran, dass Du manchmal CalendarEntry und manchmal CalenderEntry schreibst. Ich tippe mal bei dem Header müsste es ein 'e' sein.

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.08.2017, 20:29 Uhr
Alex33




C++:

  

void bool set(const CJulianDate& date, const std::string& location,
            const std::string& description){
    if( toGregorianDate(int& year, short& month, short& day) < toGregorianDate(1582, 10, 15)){
        return false;
    }
    else if(toGregorianDate(int& year, short& month, short& day) >=toGregorianDate(1582, 10, 15))){
    m_date = date;
    m_location = location;
    m_description = description;
    return true;
}





Fehler :


Description Resource Path Location Type
No return, in function returning non-void CCalenderEntry.cpp /CJulianDate/CJulianDate line 38 Code Analysis Problem

Stimmt der code also die Idee so?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.08.2017, 09:28 Uhr
Tommix



Wenn die erste Bedingung wahr ist, muß die zweite falsch sein und umgekehrt. D.h. das if hinter dem else muß weg. Der Fehler rührt daher, dass der Compiler ein return für den Fall "beide Bedingungen sind falsch" erwartet.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.08.2017, 14:01 Uhr
ao

(Operator)


@Alex: Wenn du nur zwei Fälle unterscheiden willst, dann machst du das mit

C++:
if (bedingung)
{ ... } // Code für "Bedingung erfüllt"
else
{ ... } // Code für "Bedingung nicht erfüllt"


Das reicht völlig. Du schreibst also nicht

C++:
if (bedingung) // Test auf die Bedingung
{ ... }
else if (!bedingung) // Test aufs Gegenteil
{ ... }


Erstens ist die zweite Auswertung derselben Bedingung unnötig und Verschwendung von Rechenzeit.
Zweitens (und das ist schlimmer) deckt dieser Code aus Sicht des Compilers nicht alle Fälle ab, es fehlt das else, das alle übrigen Möglichkeiten einfängt.
Dass in diesem Fall nach den Gesetzen der Logik kein dritter Weg existieren kann (weil die beiden ersten Bedingungen gegenteilig sind), ist ohne Bedeutung. Das wird vom Compiler nicht überprüft. Der sieht nur, dass es außer dem if- und dem else-if-Weg formal noch einen dritten gibt, der nicht ausprogrammiert wurde.

Die Fehlermeldung "no return in function returning non-void" ist eine Folge davon: Auf diesem dritten Weg gibt es kein return-Statement.

Eine "sinnvolle" Anwendung von if-else-if-else ist z.B. sowas hier:

C++:
unsigned int n;
cin >> n;
if (n < 3) // 0 bis 2
    cout << "sehr wenige";
else if (n < 6)  // 3 bis 5
    cout << "schon mehr";
else // alles über 5
    cout << "ganz viele";

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
16.08.2017, 14:04 Uhr
ao

(Operator)


Ach ja, und der Funktionskopf ist falsch: void bool set (...) - da sind zwei Rückgabetypen.

Entweder void set (...) oder bool set (...)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
22.08.2017, 11:45 Uhr
Alex33



Bin mittlerweile im 2 Teil der Aufgabe :

header

C++:
#ifndef CCALENDAR_H_
#define CCALENDAR_H_
#include <string>
#include<iostream>
using namespace std;

class CCalendar {

private:
    CCalendar::CCalendarEntry* m_entries = 0;
    unsigned int m_numberofEntries = 0;
public:
    CCalendar();
     ~CCalendar();
     CCalendar& operator+=(const CCalendarEntry& entry);
     void print( const CJulianDate& from);
     void print();
};

#endif /* CCALENDAR_H_ */




cpp


C++:
             #include "CCalendar.h"




CCalendar::CCalendar(int m_numberofEntries, CCalendarEntry* m_entries) {

       m_numberofEntries = numberofEntries;
       m_entries = entries;


}

CCalendar::~CCalendar() {
    // TODO Auto-generated destructor stub
}

    

https://www.pic-upload.de/view-33784974/c.png.html

Es werden mir Fehler angezeigt beim Konstruktor ?

Warum?

https://www.pic-upload.de/view-33784979/fehler.png.html
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: