Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

1

08.10.2005, 18:17

Float als Referenz übergeben (C#)

Hi,

Ich hab ne Funktion der ich ein Label und eine Float Variable übergebe. Das Label wird als Referenz übergeben, die float Variable nicht. Wie kann ich das in C# steuern?? Pointer sind doch toll ;p
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

2

08.10.2005, 18:47

Funktionsdef:

C-/C++-Quelltext

1
2
3
4
public void Increment(out int i) 
{
  i++;
}


Funktionsaufruf muss dann ebenfalls das Schlüsselwort out enthalten:

C-/C++-Quelltext

1
2
int inc = 0;
Increment(out inc);

mfg Philipp

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

3

08.10.2005, 19:43

Geht nicht :(

Zitat


The out parameter 'parameter' must be assigned to before control leaves the current method
A parameter marked with the out keyword was not assigned a value in the method body.
The following sample generates CS0177:
// CS0177.cs
public class iii
{
public void f(out int i) // CS0177
{
// uncomment the following line to resolve this error
// i = 0;
}

public static void Main()
{
}
}


Ich kann die Var doch nicht initialisieren, da sonst der Wert der übergeben wurde überschrieben wird!!

edit:

Ich brauch quasi das in C#:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
float[] fArray = new float[20];
int Count = 0;
float f;

void Add(float* f_p)
{
fArray[Count] = f;
Count++;;
}

void print()
{
    for(int i = 0; i < 20; i++)
    {
         cout << fArray[i] << endl;
     }
}
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

4

08.10.2005, 20:09

Sorry falsches Schlüsselwort.
ref anstatt out

mfg Philipp

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

5

09.10.2005, 17:24

Hab ich schon versucht, geht nicht :(

Ich hab mal ein Test Proggie geschreiben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;

namespace TestConsole
{
    /// <summary>

    /// Summary description for Class1.

    /// </summary>

    class Class1
    {
        static int i;
        static int[] IntArray;
        /// <summary>

        /// The main entry point for the application.

        /// </summary>

        [STAThread]
        static void Main(string[] args)
        {
            IntArray = new int[10];

            increment(ref i);
            i = 500;
            testout();
        }

        static private void increment(ref int i)
        {
            IntArray[0] = i;
        }

        static private void testout()
        {
            Console.WriteLine(IntArray[0]);
        }
    }
}


Eigentlich sollte im Array der Wert 500 stehen, da steht aber 0.
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Dave

Alter Hase

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

6

09.10.2005, 17:45

macht so ja auch wenig sinn und ist vollkommen logisch, dass nur nullen in deinem array stehen. i wird standardmäßig mit 0 initialisiert und ist zum zeitpunkt des aufrufes von increment 0! wenn du i vorher einen wert zuweisen würdest, würde dieser danach auch in deinem array stehen...
kurz: du musst einfach "increment(ref i);" und " i = 500; " vertauschen.

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

7

10.10.2005, 09:47

Das ist mir schon klar. Aber ich will ja das es so funktioniert, das nacher 500 ausgegeben werden.

In C++ würde das doch so funktionieren:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Class1
    {
        static int i;
        static int* IntArray[];

        [STAThread]
        static void 

        static private void increment(int* i)
        {
            IntArray[0] = i;
        }

        static private void testout()
        {
            cout << IntArray[0];
        }
    }


int Main(string[] args)
        {
            IntArray = new int[10];

            increment(&i);
            i = 500;
            testout();
        }


Wie bekomm ich das in C# gebacken??
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

10.10.2005, 16:14

Würde so nicht funktionieren, da du das array mit int inits und nicht wie es sollte als Zeiger...
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

9

10.10.2005, 22:09

Ich hab mir schon gedacht das das falsch ist. Muss das dann so heißen?

C-/C++-Quelltext

1
IntArray = new (int*)[10];


Hat keiner ne Ahnung wie das in C# funktioniert??
Ansonsten muss ich mir anders behelfen, was theoretisch kein Problem ist. Ist dann halt nicht mehr ganz Speicherfreundlich, aber noch völlig im Rahmen.
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Dave

Alter Hase

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

10

11.10.2005, 00:47

in c# dürfte das nicht so ohne weiteres gehen, da es ja keine klassischen pointer mehr gibt und int ein value type ist. such mal ein bisschen unter den stichwörtern boxing und unboxing bzw. value und reference types. vllt hilft dir das weiter.

Werbeanzeige