Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Struktur och tilldelning

Postades av 2002-01-28 21:28:12 - Carl Gustavsson, i forum c++, Tråden har 7 Kommentarer och lästs av 1263 personer

Om jag har en struct vid namn glosa och jag vill deklarera "antal" sådana
så skriver man ju så här:

glosa *ord = new glosa[antal]

sedan när jag ska stoppa in värden i dessa gör jag så här:

for (int i = 0; i < (antal-1); i++){
cin >> ord[i]->sv; //sv är en char[25]
cin >> ord[i]->eng; //eng är en char[25]
}

men VC++ gillar definitivt inte min tilldelning av medlemsvariablerna i strukturen. Den säger att det är en felaktig tilldelning. Någon som vet hur jag ska göra för att komma runt det?


/ Carl


Svara

Sv: Struktur och tilldelning

Postades av 2002-01-29 17:11:55 - Mattias Sjögren

Borde du inte ha:

cin >> ord[i].sv;
cin >> ord[i].eng;


MS


Svara

Sv: Struktur och tilldelning

Postades av 2002-01-30 08:36:03 - Jonas Lundqvist

Du kommer också att missa sista objectet i ditt fält:

for (int i = 0; i < (antal-1); i++)

borde vara:
for (int i = 0; i < antal; i++)
eller
for (int i = 0; i <= (antal-1); i++)

Eftersom (antal - 1) är ett index i fältet men om du skriver i < (antal - 1) så kommer den aldrig att gå ända upp till den utan bara till den innan.

//Jonas


Svara

Sv: Struktur och tilldelning

Postades av 2002-01-30 18:47:11 - Carl Gustavsson

>> Borde du inte ha:
>>
>>cin >> ord[i].sv;
>>cin >> ord[i].eng;

Svar nej eftersom ord är en pekare!


>>Du kommer också att missa sista objectet i ditt fält:
>>for (int i = 0; i < (antal-1); i++)
>>
>>borde vara:
>>for (int i = 0; i < antal; i++)
>>eller
>>for (int i = 0; i <= (antal-1); i++)
>>
>>Eftersom (antal - 1) är ett index i fältet men om du skriver i < (antal - >>1) så kommer den aldrig att gå ända upp till den utan bara till den >>innan.

Nej eftersom fältet innehåller "antal" värden och första är 0 och sista blir då "antal - 1".

// Carl


Svara

Sv: Struktur och tilldelning

Postades av 2002-01-30 23:04:59 - Niklas Jansson

>>Svar nej eftersom ord är en pekare!

Jo...

Förklaring:
En pekare och en array är samma sak. Man kan skriva

int a[];

eller

int *a;

det betyder exakt samma sak. Faktum är att kompilatorn direkt översätter a[] till *a. Skälen till att det finns två sätt är flera och jag orkar inte ta upp dem just nu. Om någon är mycket intresserad kanske jag orkar imorrn... Nåväl. För att komma åt element nummer tre i en array skriver du antingen:

a[3];

eller

*(a+3);

en del i en struct fås fram med hjälp av punktoperatorn eller piloperatorn på följande sätt:

EnStruct a, *p=new EnStruct;
cout << a.Medlem;
cout << (*p).medlem;
cout << p->medlem;

Piloperatorn är alltså en förkortning av (*p).

I din funktion skriver du ord[i]->eng;
ord[i] översätts till *(ord+i)

tillsammans med -> ger detta
*(*(ord+i)).eng

** ger en pekare till en pekare (vilket i och för sig kan användas i andra sammanhang).

Hoppas du förstår vad jag menar...
Slutpoängen är i alla fall att du kan skriva

(ord+i)->eng;

eller

ord[i].eng;

Personligen tycker jag att det senare är snyggast, men det finns ändå ett bättre (effektivare och lite elegantare) sätt:

for(glosa *DettaOrd=ord, *SistaOrd=ord+antal; DettaOrd!=SistaOrd; DettaOrd++)
cin << DettaOrd->Eng;
...


>>Nej eftersom fältet innehåller "antal" värden och första är 0 och sista
>>blir då "antal - 1".

Det stämmer. Men for-loopen slutar vid antal-2 eftersom värdet kontrolleras innan övriga loopen utförs. Och värdet är mindre än antal-1 fram till det är just antal-1 - och i det tillfället bryts loopen.

Jag är hundra procent säker på båda ovanstående punkter.

/Niklas Jansson

PS.
Hoppas jag inte låter för arrogant. Det är bara det att jag har en uppsats som skall in i övermorgon och jag har ingen tid i morgon...
så jag skriver så kort jag kan.
DS


Svara

Sv: Struktur och tilldelning

Postades av 2002-01-31 19:17:14 - Carl Gustavsson

--------------------Configuration: glostest - Win32 Debug--------------------
Compiling...
main.cpp
Linking...
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/glostest.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

glostest.exe - 2 error(s), 0 warning(s)

Detta är felmeddelandet jag får när jag testade din metod Niklas. Det är förövrigt likadant som felet jag får med min metod.

Okej, jag hade fel ifråga om loopen skulle varit >= istället för > så hade det funkat. Men det med pekare och arrayer betyder ju att min metod borde ha funkat, eller?

/ Carl


Svara

Sv: Struktur och tilldelning

Postades av 2002-02-01 15:57:25 - Niklas Jansson

>>Men det med pekare och arrayer betyder ju att min metod borde ha funkat, eller?

Nej. Du har två alternativ; ord[i].eng och (ord+i)->eng. Ingen skillnad i effektivitet, men den första brukar vara mer lättläst.

Felet du beskriver beror på att du någonstans refererar till en funktion som inte finns (genom att ha stavat fel eller liknande).
I ditt fall är det så att det skall finnas en funktion som heter winmain. Det betyder att du har valt att göra det som ett windowsprogram.
Jag antar att det inte är meningen, så du får skapa ett nytt projekt och välja Win32 Concole Application som projekttyp. Sedan får du överföra alla filer till det nya projektet.

/Niklas Jansson


Svara

Sv: Struktur och tilldelning

Postades av 2002-02-01 20:22:22 - Carl Gustavsson

Okej ska kolla det, men är nästan 100% säker att jag valde console!


/ Carl


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 615
27 953
271 709
5 568
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies