Probleme mit zwei Rückgabewerte aus Funktion, mittels Strukturen.



  • Hallo

    Ich schreibe gerade ein Programm mit einer Funktion, welche mir 2 Rückgabe werte liefern soll. Ich möchte dies mit einer Struktur realisieren. Diese Funktion und die Struktur sind Teil einer Klasse, und ich glaube da drückt der Schuh. Nachdem ich alles geschrieben habe, bekomme ich eine Fehlermeldung, an deren Lösung ich nun verzweifle.

    Meinen kompletten Code hier zu posten, würde wohl den Rahmen sprengen, weswegen ich ein BeispielCode mit dem wesentlichen Problem geschrieben habe. Auch hier bekomme ich die Selbe Fehlermeldung + 2 weitere 😕

    test.h

    class Test
    {
    	public:
    		Test();
    
    		struct struct_test
    		{
    			int test_i;
    			double test_d;
    		};
    
    		struct struct_test test_struct;
    
    		struct_test addition(struct_test struct1, struct_test struct2);
    };
    

    test.cpp

    Test::Test()
    {
    	test_struct.test_i=0;
    	test_struct.test_d=0.0;	
    };
    
    struct struct_test Test::addition(struct_test struct1, struct_test struct2)
    {
    	test_struct.test_i=struct1.test_i+struct2.test_i;
    	test_struct.test_d=struct1.test_d+struct2.test_d;
    	return test_struct;
    };
    
    int main (int argc, char * const argv[])
    {
    	struct struct_test structa;
    	structa.test_i=1;
    	structa.test_d=10.0;
    
    	struct struct_test structb;
    	structb.test_i=2;
    	structb.test_d=20.0;
    
    	Test structuretest;
    
    	structuretest.addition(structa,structb);
    
    	cout << test_struct.test_i << " " << test_struct.test_d << endl;	
    
    	return 0;
    }
    

    Fehlermeldung:
    test.cpp:17: error: prototype for ‘struct_test Test::addition(Test::struct_test, Test::struct_test)’ does not match any in class ‘Test’
    test.h:26: error: candidate is: Test::struct_test Test::addition(Test::struct_test, Test::struct_test)

    test.cpp: In function ‘int main(int, char* const*)’:
    test.cpp:27: error: aggregate ‘struct_test structa’ has incomplete type and cannot be defined
    test.cpp:31: error: aggregate ‘struct_test structb’ has incomplete type and cannot be defined
    test.cpp:39: error: ‘test_struct’ was not declared in this scope

    Die Fett gedruckte Fehlermeldung bekomme ich auch bei meinem ursprünglicgen Programm. Die anderen treten jetzt auf, keine Ahnung was hier das Problem ist 😕 ich schaus mir aber natürlich nochmal an.

    Grüße


  • Mod

    Die Rückgabewerte von Prototyp und Deklaration sind unterschiedlich. Das ist der technische Fehler.

    Aber alles was du da machst ist höchst ungewöhnlich. Ich weiß gar nicht, wo ich mit Kritik anfangen soll. Das ganze Programm ist entweder total falsch designed oder die Namen entsprechen nicht der Bedeutung. Zum Beispiel: Warum ist eine struct_test-Addition eine Memberfunktion von Test? Was ist denn das für eine komische Art von Addition?



  • Mal so'n Tip, auch zur besseren Überschaubarkeit: http://www.cplusplus.com/reference/std/utility/pair/



  • du kommst da ein wenig mit den Orten durcheinander wo deine Daten stehen:

    #include <iostream>
    
    using namespace std;
    
    class Test
    {
        public:
            Test();
    
            struct struct_test
            {
                int test_i;
                double test_d;
            };
    
            struct_test test_struct;
    
            struct_test addition(struct_test struct1, struct_test struct2);
    };
    
    Test::Test()
    {
        test_struct.test_i=0;
        test_struct.test_d=0.0;   
    };
    
    Test::struct_test Test::addition(struct_test struct1, struct_test struct2)
    {
        test_struct.test_i=struct1.test_i+struct2.test_i;
        test_struct.test_d=struct1.test_d+struct2.test_d;
        return test_struct;
    };
    
    int main (int argc, char * const argv[])
    {
        Test::struct_test structa;
        structa.test_i=1;
        structa.test_d=10.0;
    
        Test:: struct_test structb;
        structb.test_i=2;
        structb.test_d=20.0;
    
        Test structuretest;
    
        structuretest.addition(structa,structb);
    
        cout << structuretest.test_struct.test_i << " " << structuretest.test_struct.test_d << endl;   
    
        return 0;
    }
    

    greetz KN4CK3R



  • SeppJ schrieb:

    Die Rückgabewerte von Prototyp und Deklaration sind unterschiedlich. Das ist der technische Fehler.

    Hmm, der Rückgabewert ist doch beides Mal eine Struktur? :-o

    SeppJ schrieb:

    Aber alles was du da machst ist höchst ungewöhnlich. Ich weiß gar nicht, wo ich mit Kritik anfangen soll. Das ganze Programm ist entweder total falsch designed oder die Namen entsprechen nicht der Bedeutung. Zum Beispiel: Warum ist eine struct_test-Addition eine Memberfunktion von Test? Was ist denn das für eine komische Art von Addition?

    Kurz zu meiner Verteidigung. Das hier, ist ein Beispielcode, den ich in wenigen Minuten runtergetippt habe, um mein Problem zu beschreiben. In meinem richtigen Code sieht die Namensgebung und die Funktionen ganz anders aus.



  • KN4CK3R schrieb:

    du kommst da ein wenig mit den Orten durcheinander wo deine Daten stehen:
    greetz KN4CK3R

    Danke. Das wars, du bist mein persönlciher Held des Tages. Vielen Vielen Dank 🙂

    Oh man darauf hätte ich auch selbst kommen können ... die ganzen Test::


Anmelden zum Antworten