alternative zu namespace ??



  • ahoi und guten morgen

    ich will nich so viel tippen, und definiere deswegen teiele meines codes
    in einem namespace. kein prolem soweit.
    leider klappt da nich , wenn in der ausgabe bezeichner stecken,
    dann meckert der pprozessor, weil die ja nicht deklariert sind.
    und eine namespace kann ich nur ausserhalb der main erstellen bzw
    kann bei namespace nicht mit prototypen arbeiten..

    geht das?

    namespace schnipsel(){
    void linie(){
       cout<<"----------------------------"<<endl;  //funktioniert 1a
    }
    void mitBezeichner(){
        cout<<"-----------""<<foo<<"-------"<<endl; //will nich, macht aerger grrrr
    }
    }
    int main(){
     int foo = "Huhu guten morgen";
    schnipsel::mitBezeichner();
    }
    

    schonen dank und gruesse
    steffi



  • Was hat dein Problem mit namespace zu tun? Das Problem würde auch ohne namespace aufkommen.

    foo ist nur im main() bekannt, weil das der Gültigkeitsbereich für foo ist. Wenn dann mußt du foo an mitBezeichner() übergeben:

    namespace schnipsel{
     void mitBezeichner(int f){ 
         cout<<"-----------""<< f <<"-------"<<endl;
     } 
    }
    int main(){ 
     int foo = "Huhu guten morgen"; // foo ist nur in main-Bereich bekannt,
                                    // da nur hier deklariert
     schnipsel::mitBezeichner(foo); 
    }
    

    Hat aber nicht mit namspace zu tun.

    Weiterhin hast du foo als int definiert, obwohl du ihm einen string übergibst. Kann auch nicht funktionieren.

    Wieso beschäftigst du dich mit namespaces, wenn du nicht mal c++-Grundlagen kannst? 🙄



  • herpes schrieb:

    ich will nich so viel tippen, und definiere deswegen teiele meines codes in einem namespace.

    Mal abgesehen, daß dein Motiv, Namespaces zu verwenden fragwürdig ist, gibt die Aussage nicht wirklich Sinn... 😕



  • danke fuer deine antwort...

    Wieso beschäftigst du dich mit namespaces, wenn du nicht mal c++-Grundlagen kannst?

    das int war ein schreibfehler von mir..
    ich kenne zum glueck den unterschied zwischen int und string.

    ich habe nach einer moeglchkeit gesucht, immer wieder kehrende code schnipsel
    einen alias (oder wie auch immer das heissen kann) zugeben.



  • Was konkret willst Du machen?

    Suchst Du nach using-Direktiven/ Deklartationen?



  • herpes schrieb:

    ich habe nach einer moeglchkeit gesucht, immer wieder kehrende code schnipsel einen alias (oder wie auch immer das heissen kann) zugeben.

    namespaces können das nicht. Ihre Aufgabe besteht einzig und allein darin, in größeren Projekten Namenskonflikte zu verhindern.



  • namespaces können das nicht. Ihre Aufgabe besteht einzig und allein darin, in größeren Projekten Namenskonflikte zu verhindern.

    in meinem c++ buch steht unter namespaces als beispiel:

    // namespace.cpp - Ein Beispiel für Namensbereiche
    
    #include <iostream.h>
    
    namespace Zeichenkette
    {
    	char s[200] = "";
    
    	void einlesen()
    	{
    		cin.getline( s, sizeof(s)-1 );
    	}
    
    	void ausgeben()
    	{
    		cout << s << endl;
    	}
    }
    
    void main()
    {
    	Zeichenkette::einlesen();
    	Zeichenkette::ausgeben();
    	cout << Zeichenkette::s << endl;
    }
    

    da dachte ich: hey ich kann code schnipsel irgendwie verknuepfen,
    und diese mit dem praeprozessor austauschen lassen.

    fuer mich als anfaenger tut sich leider nich spontan auf, das dies eine
    zweifelhafte motivation wiederspiegelt.

    okay, wieder was gelernt..
    werde jetzt nach
    using-Direktiven/ Deklartationen
    ausschau halten

    vielen dank an alle 🙂



  • herpes schrieb:

    in meinem c++ buch steht unter namespaces als beispiel:
    [SCHNIPP]
    da dachte ich: hey ich kann code schnipsel irgendwie verknuepfen,
    und diese mit dem praeprozessor austauschen lassen.

    Da hast du aber nur die Funktionen gesehen, die eine Art der Wiederverwendung von Code darstellen. Der Namespace hat damit nichts zu tun. Der einzige Sinn davon ist, dass du parallel dazu noch andere Namespaces haben kannst, die auch die Bezeichner s, einlesen und ausgeben enthalten können, ohne dass es zu Konflikten kommt.
    Der Präprozessor hat damit übrigens nichts zu tun, der bearbeitet nur Direktiven, die mit # anfangen, wie #define oder #include.



  • herpes schrieb:

    fuer mich als anfaenger tut sich leider nich spontan auf, das dies eine
    zweifelhafte motivation wiederspiegelt.

    okay, wieder was gelernt..
    werde jetzt nach
    using-Direktiven/ Deklartationen
    ausschau halten

    vielen dank an alle 🙂

    als anfänger solltest du dir nicht so viel gedanken über namespaces machen. wenn du allein an einem pojekt arbeitest, kannst du namespaces immer vermeiden.



  • fuez schrieb:

    als anfänger solltest du dir nicht so viel gedanken über namespaces machen. wenn du allein an einem pojekt arbeitest, kannst du namespaces immer vermeiden.

    Die Gedanken würde ich mir schon alleine aufgrund der korrekten Verwendung von <iostream> + Namespace std statt <iostream.h> + globaler Namensraum machen und warum man NSs vermeiden soll will mir nicht ganz einleuchten, seit wann sind die denn was Böses? 😕


Anmelden zum Antworten