[MVSC++6.0] Problem bei Deklaration und Definition von Methoden



  • Moinsen Community !

    Ich bin grade dabei mir selbst C++ beizubringen.
    So. Nun iss ja alles gut und schön, hab ich folgendes Problem:
    Beim versuch in der menue.cpp die Methode zu Definieren wirft der Compiler
    [MSVC++6.0] folgende Fehlermeldung aus:

    J:\Eigene Dateien\Meine Projekte\noname002\main.cpp(29) : error C2352: 'C_Menue::DrawMenue' : Unzulaessiger Aufruf einer nichtstatischen Member-Funktion
    j:\eigene dateien\meine projekte\noname002\menue.h(6) : Siehe Deklaration von 'DrawMenue'

    Warum muss ich eine statische Methode Deklarieren, damit ich sie später
    Definieren kann ?
    Soweit ich weiss, sollte das auch ohne static funktionieren

    Datei main.cpp

    #include <iostream>
    #include <string>
    #include <stdio.h>
    #include "menue.h"
    
    using namespace std;
    
    int main ()
    {
    	char title[30];
    	int hoehe, laenge;
    
    	printf ("Name fuer das Menue: ");
    	gets ( title );
    	printf ("\n");
    
    	printf ("Laenge des Menues: ");
    	scanf("%d",&laenge);
    	printf ("\n");
    
    	printf ("Hoehe des Menues: ");
    	scanf("%d",&hoehe);
    	printf ("\n");
    
    	system("cls");
    
    	printf ("Hoehe: %d Laenge: %d \n\n",hoehe,laenge);
    
    	C_Menue::DrawMenue( laenge, hoehe, title );
    
    	system("pause");
    	return 0;
    }
    

    Datei menue.h

    #include <string>
    
    class C_Menue
    {
    public:
    	void DrawMenue(int length, int height, std::string title);
    };
    

    Datei menue.cpp

    #include "menue.h"
    #include <iostream>
    
    void C_Menue::DrawMenue(int lenght, int height, std::string title)
    {
    	std::string title_p1;
    	std::string title_print;
    	int title_maxlen;
    
    	for ( int i = 0; i <= lenght; i++)
    	{
    		title_p1.append("\xCD");
    	};
    
    	title_print.append("\xC9"+title_p1+"\xB4 " + title + " \xC3"+title_p1+"\xBB");
    	title_maxlen = title_print.length() - 2;
    	title_print.append("\n");
    
    	for ( i = 0; i <= height; i++)
    	{
    		if (i == height)
    		{
    			title_print.append("\xC8");
    			for ( int a = 0; a <= title_maxlen-1; a++)
    			{
    				title_print.append("\xCD");
    			}
    			title_print.append("\xBC\n");
    		}
    		else
    		{
    			for ( int x = 0; x <= title_maxlen; x++ )
    			{
    					if (x == 0)
    					{
    						title_print.append("\xBA");
    					}
    					if (x == title_maxlen)
    					{
    						title_print.append("\xBA\n");
    					}
    					else
    					{
    						title_print.append(" ");
    					}
    			}
    		}
    	};
    
    	printf ("%s",title_print.c_str());
    }
    

    €dit:
    Sobald ich der Deklaration ein static anführen lasse, läuft alles problemlos.



  • Jo ... hmm weil du halt ein Object von C_Menu erstellen musst ...



  • Öhh ja klar 😃

    Erklärst du mir wie das geht ?
    Ich glaub soweit war ich noch ned.
    Bzw. Weiss ich grade mal nich was du meinst.



  • naja du hast sowieso nen komischen mischmasch da ...

    #include <iostream>
    #include <string>
    #include "menue.h"
    
    int main ()
    {
        std::string string_title;
        unsigned short hight = 0;
        unsigned short lenght = 0;
    
        std::cout << "Name fuer das Menue: " << std::flush;
        std::getline(std::cin, string_title);
    
        std::cout << "Laenge des Menues: " << std::flush;
        std::cin >> lenght;
        std::cout << "Hoehe des Menues: " << std::flush;
        std::cin >> hight;
    
        std::cout << "Hoehe: " << hight << std::endl;
        std::cout << "Laenge: " << length << std::endl;
    
        C_Menue menu;
        menu.DrawMenue(lenght, hight, title);
    
        return 0;
    }
    

    Und der Rest des Codes geht noch weniger -.- also da musse mal dringen was dran machen ^^

    aja ... hab jetzt keine Fehlerabfrage falls kein unsigned short eingegeben wurde ... muss du noch machen ...



  • lol kann mich mal jemand treten ?

    C_Menue menu; 
        menu.DrawMenue(lenght, hight, title);
    

    Hab ich ja glatt vergessen 😡

    THX

    hmm die abfrage iss ja eh nur provisorisch ...
    die brauch ich nur zum testen


Anmelden zum Antworten