» »

c# problem z lokalno spremenljivko

c# problem z lokalno spremenljivko

KernelPanic ::

Spostovani!

Programiram eno stvar in sem naletel na sledec problem. Znotraj funkcije sem deklariral spremenljivko in ko jo hocem uporabiti, te spremelnljivke ne najde. Kako naj to resim? Sledi koda:
            DateTime readDeviceClock()
            {
                short[] bufferDeviceClock=new short[7];

                if(this.m_pMB_Protocol.readInputRegisters(1,
                    2497,
                    bufferDeviceClock,
                    sizeof(bufferDeviceClock) / sizeof(short)) == FieldTalk.BusProtocolErrors.FTALK_SUCCESS)
                {
                    return new DateTime(bufferDeviceClock[6],
                        bufferDeviceClock[5],
                        bufferDeviceClock[4],
                        bufferDeviceClock[3],
                        bufferDeviceClock[2],
                        bufferDeviceClock[1]);
                }

                return new DateTime();
            }   // readDeviceClock
in napaka, ki jo javi c# compiler:
Error 1 The type or namespace name 'bufferDeviceClock' could not be found (are you missing a using directive or an assembly reference?) D:\Projects\AccuLoadIIISolution\AccuLoadIIICommDll\AccuLoadIIICommDll\Core.cs 40 28 AccuLoadIIICommDll
Uporabljam Visual Studio 2010 Ultimate na Windows XP Pro z .Net Framework 4.

S spostovanjem in vnaprej hvala za pomoc,
M.
  • spremenil: Mavrik ()

Spura ::

sizeof operira s tipi, ne spremenljivkami
ce se ne motim je takole: sizeof(short) * bufferDeviceClock.length

edit: vidim da potem itak delis s sizeof(short) zakaj potem sploh delas te kolobocije s sizeof, ko pa te ubistvu zanima samo dolzina arraya?

Zgodovina sprememb…

  • spremenil: Spura ()

KernelPanic ::

Hmm, v dokumentaciji dll knjiznice, ki jo uporabljam, je primer naveden z sizeof in iskreno, tudi meni ni jasno, zakaj so tako zakomplicirali. Sicer sem C++ guru in ta sizeof v C++ varianti programa, ki ga sedaj portam v C#, deluje brezhibno.

Senitel ::

int a = 10;
std::cout << sizeof(a) << std::endl;

Je čisto veljavna sintaksa.

Tole: sizeof(bufferDeviceClock) / sizeof(short) načeloma pove koliko je bajtov v bufferDeviceClock. Ampak če te zanima samo dolžina v elementih, potem je bufferDeviceClock.length to kar iščeš.

KernelPanic ::

Glih to je sranje, ker je dokumentacija porazna moram sprobat oboje. :)) Bom pa vsekakor javil, na kateri nacin stvar dela.

Spura ::


int a = 10;
std::cout << sizeof(a) << std::endl;

Je �isto veljavna sintaksa.

Tole: sizeof(bufferDeviceClock) / sizeof(short) na�eloma pove koliko je bajtov v bufferDeviceClock. Ampak �e te zanima samo dolŞina v elementih, potem je bufferDeviceClock.length to kar iť�eť.

Sori, ampak ne zastopim kako tisto deljenje pove velikost v bajtih. A sizeof za bufferDeviceClock vrne stevilo elementov? Pomojem sizeof(bufferDeviceClock) vrne 14, sizeof(bufferDeviceClock) / sizeof(short) pa vrne 7, kar ni stevilo bajtov.

Poleg tega kar si napisal je morda veljavna sintaksa v C++ kar pa ne pomeni nujno da dela v C#. Kratek google mi naprimer pokaze da sizeof ne dela na short[] ker je short[] referencni tip. Kot drugo, mi ni uspelo najti niti enega C# primera kjer se sizeof uporablja na spremenljivki in ne tipu, kar daje sum da to ni mozno.

Poleg tega imas sporocilo kompajlerja o napaki, ki v bistvu pravi, da ne najde tipa bufferDeviceClock, kar pomeni da je variabla uporabljena nekje, kjer bi moral biti tip. in sizeof je edina taka moznost. Pri tako dobrem sporocilu o napaki (ima tudi vrstico napake) se clovek za hip vprasa zakaj je to na forumu (dokler se ne spomni teme o tem kaj je if stavek v PHP).

Zgodovina sprememb…

  • spremenil: Spura ()

Senitel ::

Bah zamešal... Pove velikost arraya v elementih. sizeof(bufferDeviceClock) je size v bajtih, sizeof(short) je velikost enega elementa v bajtih... To za C++.
Za C# ja pa točno tako kot si ti rekel, sizeof deluje samo na tipih.

KernelPanic ::

Ta c# je navaden crap.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# in DateTime

Oddelek: Programiranje
101266 (1086) FiDeK
»

[C++] problem z binarnimi datotekami

Oddelek: Programiranje
9862 (727) mallard
»

c# - mssql kombinacija / problem pri zapisu row-a v bazo

Oddelek: Programiranje
121452 (1261) darkolord
»

[C++ DirectX] DirectSound vodič za začetnike

Oddelek: Programiranje
131685 (1471) W3by

Več podobnih tem