Kenn mich mit Modularer Programmierung nicht aus



  • Ich kenn mich mit Modularer Programmierung noch kaum aus, da ich bis jetzt immer alles in die main.cpp gepresst habe. Ich wollte es aber jetzt bei einem Programm machen aber es geht nicht.

    //main.cpp
    #include <iostream>
    #include "artcharacter.h"
    using namespace std;
    
    int main()
    {
        string b;
        cout << "Eingabe: ";
        GetString(b,5000);
        cout << "Ausgabe: " << initial(b) << endl;
    	return 0;
    }
    
    //artcharacter.h
    string initial(const string &s);
    void GetString(string &s,int maxlength);
    
    //functionsdef.cpp
    #include "artcharacter.h"
    #include <iostream>
    #include <cstring>
    #include <string>
    #include <cctype>
    
    string initial(const string &s)
    {
        string temp=s;
        size_t length=temp.size();
        if (length)
        {
            temp[0]=toupper(temp[0]);
            for(size_t i=1; i<length; i++)
            {
                if(isalpha(temp[i])&&!isalpha(temp[i-1]))
                {
                    temp[i]=toupper(temp[i]);
                }
                else
                {
                    temp[i]=tolower(temp[i]);
                }
            }
        }
        return temp;
    }
    
    void GetString(string &s,int maxlength)
    {
        char *temp=new char[maxlength+1];
        cin.get(temp,maxlength);
        s=temp;
    }
    

    Was ist da falsch?? Und wie funktioniert es richtig? Als ich zuvor das Programm in die main reingepresst habe, hats tadellos funktioniert. Ich hab natürlich auch alles zum Projekt dazugefügt und so und die header und cpp sind auch im Projektordner. Vll. hat ja jemand einen Link für mich wo das mit der Modualren Programmierung erklärt wird. Aber so schwierig ist das ja glaub ich gar nicht.
    Dankeschön schon mal im Voraus.



  • Hallo,

    was kommt denn fuer eine Fehlermeldung? Haste die cpp auch alle kompiliert und gelinkt?

    gruss
    v R



  • Oh ups die Fehlermeldungen hab ich vergessen:

    -------------- Build: Debug in characters ---------------
    Compiling: main.cpp
    In file included from main.cpp:2:
    artcharacter.h:1: error: string' does not name a type artcharacter.h:2: error: variable or fieldGetString' declared void
    artcharacter.h:2: error: string' was not declared in this scope artcharacter.h:2: error:s' was not declared in this scope
    artcharacter.h:2: error: expected primary-expression before "int"
    artcharacter.h:2: error: initializer expression list treated as compound expression
    main.cpp: In function int main()': main.cpp:9: error:GetString' cannot be used as a function
    main.cpp:10: error: `initial' undeclared (first use this function)
    main.cpp:10: error: (Each undeclared identifier is reported only once for each function it appears in.)
    Process terminated with status 1 (0 minutes, 0 seconds)
    9 errors, 0 warnings



  • Im Header musst du den Namensraum voll qualifizieren:

    //artcharacter.h

    #ifndef ARTCHARACTER_H
    #define ARTCHARACTER_H
    #include <string>
    
    std::string initial(const std::string &s);
    void GetString(std::string &s,int maxlength);
    
    #endif
    

    gruss
    v R



  • Hallo

    in artcharacter.h must du die Vorkommen von "string" noch mit dem Namespace std:: versehen, und in functionsdef.cpp entweder das using namespace std oder auch wieder bei jedem "string" den Namespace extra angeben.

    Übrigens wird für gewöhnlich die Implementationsdatei genauso wie die Headerdatei genannt, in deinem Fall also artcharacter.cpp

    bis bald
    akari



  • Thx @all es funktioniert. Hätt ich mir schwieriger vorgestellt.


Anmelden zum Antworten