2017-12-31 214 views
-3

Ich versuche, Text in einer Funktion, zum Zentrum, aber die Funktion in einer Header-Datei center.hIst es möglich, eine Header-Datei zu zentrieren Text zu machen? - In Console

center.h genannt definieren:

#include <iostream> 
#include <iomanip> 
#include <string> 

using namespace std; 

void centerStr(string* str) { 
    int consoleWidth = 80; 
    cout << setw(consoleWidth/2) << " " << str << endl; 
} 

main.cpp:

#include <iostream> 
#include <iomanip> 
#include "center.h" 

using namespace std; 
int main() { 
    system("clear"); 
    cout << centerStr("Unit Converter By DualKeys") << endl << 
    endl; 
    return 0; 
} 

In main.cpp ich immer einen Fehler bekommen "Keine passende Funktion für Aufruf centerStr" sagen

[EDIT] Ja, Ich habe versucht centerStr im main.cpp Datei definieren

+2

Der Parameter muss 'const char *' oder 'std :: string' sein, Voting zum Schließen als Tippfehler ... – HolyBlackCat

+1

Sie werden die ODR verletzen, wenn Sie eine zweite Quelldatei hinzufügen, die diesen Header verwendet. https://stackoverflow.com/questions/7833941/putting-function-definitions-in-header-files – drescherjm

+0

sind Methoden in der Kopfzeile automatisch in der Öffentlichkeit implementiert, frage ich mich? –

Antwort

0

Dies scheint mir eine unglaublich unordentlich Art und Weise der Einstellung Dinge, aber trotzdem zu sein. ich vermeiden würde ...

using namespace std; 

in all Header-Dateien setzen oder gar den Code sauber zu halten.

center.h

//declaration 
void centerStr(const char*); 

center.CPP

#include "center.h" 
#include <iomanip> 
#include <iostream> 

//definition 
void centerStr(const char* str) { 
    int consoleWidth = 80; 
    std::cout << std::setw(consoleWidth/2) << " " << str << std::endl; 
} 

main.cpp

#include "center.h" 

int main() { 
    centerStr("Unit Converter By DualKeys"); 
    system("PAUSE"); 
    return 0; 
} 

Sie eine Überlastung für eine std :: string-Version dieser Funktion benötigen oder eine Funktionsvorlage kann ausreichen.

template<typename T> 
void centerStr(const T& t) { 
    int consoleWidth = 80; 
    std::cout << std::setw(consoleWidth/2) << " " << t << std::endl; 
} 

schließlich nur consoleWidth als globale Variable const deklarieren. Es scheint verschwenderisch, es bei jedem Anruf zu tun! :)

+1

Kenny sollten wir Header #ifndef Wächter hinzufügen? Ist es in diesem Zusammenhang notwendig? –

+0

Ich würde mir keine Sorgen über 'consoleWidth' machen, jeder halbwegs ordentliche Compiler wird es optimieren. Außerdem würde das globale Globalisieren den globalen Namespace verschmutzen. – HolyBlackCat

+0

Das eigentliche Problem ist, "die falsche Art führt zu einem Fehler." Es spielt keine Rolle, ob es in einer Kopfzeile ist oder nicht. Der Rest ist eine Codereview, die nichts mit einer einfachen Frage zu tun hat (und Leute, die es ablehnen, komisch). –

Verwandte Themen