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 som argument?

Postades av 2007-12-06 09:07:05 - Fredrik Leufkens, i forum c++, Tråden har 7 Kommentarer och lästs av 1654 personer

Hej.
Mitt problem är följande.
Problemet involverar 3 filer.
Först - en sammanställning över mina funktioner och subrutiner. Den ligger i en header enligt:

//minafunk.h
 //I main:
//...finns fler funktioner i den här filen...
int AntalPoster(char filnamn[], char task);
void LagraKund(const Kund k[], const int n);

En fil för strukturer:
//strukturer.h
struct Kund
{
	int iKundID;
	char cKundNamn[25];
	char cAdress[30];
};


Då till själva problemet. Jag har två ytterligare filer i sammanhanget här;

* kundhantering.cpp
* filhantering.cpp

Ovan fungerar enligt följande:
//Kundhantering.cpp
void LaggTillKund()
{
	Kund nyKund =
	{
		AntalPoster("txtFiler/ProgramData/Kunddata.txt", 's')+1,
		"cKundNamn",
		"cKundAdress"
	};
	//Hämtar nu information för att lägga till kund.
	cout << "Ange KundNamn: > ";
	cin.getline(nyKund.cKundNamn, 24);
	cout << "Ange Kundens Adress: > ";
	cin.getline(nyKund.cAdress, 29);
//HÄR börjar anropet till "LagraKund". Rätt?
	LagraKund(nyKund, 0);
	cout << endl;
	char Rubrik2[] = "Lagrad Information";
//nedan mest en test för att se om struktorn har lagrats - och det har den.
	frmtRubrik(Rubrik2);
	cout
		<< "KundID:(genereras): \t" << nyKund.iKundID << endl
		<< "KundNamn: \t\t" << nyKund.cKundNamn << endl 
		<< "KundAdress: \t\t" << nyKund.cAdress << endl;

	system("PAUSE");
}

Sedan "på andra sidan" i filhanteringen där just filhanteringen är tänkt att ske... så ser det ut så här i void LagraKund();
void LagraKund(const Kund k[], const int n)
{
for (int i=0;i<n;i++)
//Testar bara att skriva ut informationen här för att veta att jag fått fram informationen.
	cout << k[i].iKundID << ", " << k[i].cKundNamn << ", " << k[i].cAdress;
}


Kan ni, som är proffs på det här direkt se vad som inte funkar? eller hur gör man i liknande situationer?

//Fredrik L


Svara

Sv: Struktur som argument?

Postades av 2007-12-06 11:18:05 - Niklas Jansson

För det första: Det är lite märkligt upplagt, man brukar inte lägga alla "strukturer" i en fil. Snarare en fil för en struktur och de funktioner som är relaterade till den.

För det andra: Känner du till klasser? Det vore perfekt att använda i det här fallet.
För det tredje: Vad du åtminstone borde göra för att underlätta är att ersätta char [] med std::string och x[] med std::vector, så slipper du en del problem.

För det fjärde: Vad är det för problem?


Svara

Sv:Struktur som argument?

Postades av 2007-12-06 14:13:41 - Fredrik Leufkens

Ok! då är jag med...

Angående klasser.. Japp hehe. inga problem. Jag hade gärna programmerat objektorienterat men applikationen jag skriver är en kurs i Strukturerad Programmering... (som jag har släpandes hehe..)

När jag kommer hem skall jag titta på om jag inte flyttar ut strukturerna isf.

(är väl inte en jättehejare på c++ utan detta är i princip det första jag skriver...)

//Fredrik L


Svara

Sv: Struktur som argument?

Postades av 2007-12-06 17:09:00 - Niklas Jansson

Men som sagt - vad är problemet, vad är det som inte funkar?


Svara

Sv:Struktur som argument?

Postades av 2007-12-06 21:26:21 - Fredrik Leufkens

Då skall vi se här... Jag vill nog försöka bevara att samla strukturerna i en egen fil för att kunna komma åt dem smidigt. I labben som vi håller på med så hanterar vi txt-filer osv. Och då använder jag ju struktorn(använder strukturer.h) för att dels hämta in information om en post som skall läggas till.... tänkte sedan skicka över den till en annan cpp-fil som skall hantera själva skrivningen till filen. Den här filen skall även den användas för att söka osv i filerna (som jag tänkt det iaf).

Det som felar är funktionsdeklarationen i "minafunk.h".

Som synes här:
1>Compiling...
1>filhantering.cpp
1>c:\documents and settings\fredrik\my documents\skolan\c++\lab2v2\lab2v2\minafunk.h(17) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\documents and settings\fredrik\my documents\skolan\c++\lab2v2\lab2v2\minafunk.h(17) : error C2146: syntax error : missing ',' before identifier 'k'
1>formatering.cpp
1>c:\documents and settings\fredrik\my documents\skolan\c++\lab2v2\lab2v2\minafunk.h(17) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\documents and settings\fredrik\my documents\skolan\c++\lab2v2\lab2v2\minafunk.h(17) : error C2146: syntax error : missing ',' before identifier 'k'
1>c:\documents and settings\fredrik\my documents\skolan\c++\lab2v2\lab2v2\formatering.cpp(6) : warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data
1>c:\documents and settings\fredrik\my documents\skolan\c++\lab2v2\lab2v2\formatering.cpp(17) : warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data
1>kundhantering.cpp
1>c:\documents and settings\fredrik\my documents\skolan\c++\lab2v2\lab2v2\minafunk.h(17) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\documents and settings\fredrik\my documents\skolan\c++\lab2v2\lab2v2\minafunk.h(17) : error C2146: syntax error : missing ',' before identifier 'k'
1>c:\documents and settings\fredrik\my documents\skolan\c++\lab2v2\lab2v2\kundhantering.cpp(26) : error C2660: 'LagraKund' : function does not take 2 arguments
1>metodhantering.cpp
1>c:\documents and settings\fredrik\my documents\skolan\c++\lab2v2\lab2v2\minafunk.h(17) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\documents and settings\fredrik\my documents\skolan\c++\lab2v2\lab2v2\minafunk.h(17) : error C2146: syntax error : missing ',' before identifier 'k'
1>modMain.cpp
1>c:\documents and settings\fredrik\my documents\skolan\c++\lab2v2\lab2v2\minafunk.h(17) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\documents and settings\fredrik\my documents\skolan\c++\lab2v2\lab2v2\minafunk.h(17) : error C2146: syntax error : missing ',' before identifier 'k'
1>Generating Code...
1>Build log was saved at "file://c:\Documents and Settings\Fredrik\My Documents\Skolan\c++\Lab2V2\Lab2V2\Debug\BuildLog.htm"
1>Lab2V2 - 11 error(s), 2 warning(s)

minafunk.h(17) är alltså den här:

void LagraKund(const Kund k[], const int n);

Jag har provat 3 olika sätt för att lösa den här biten. Dels "Struktor som referensparameter", "struktor som vektorparameter (-så som det ser ut nu)" samt "Struktor som pekarparameter"

Ovan säger kanske inte så mycket. Jag har en liten idé på va det kan vara. I vilken ordning bör jag läsa in prylarna... som det är nu så ligger raden #include minafunk.h _före_ raden för #include strukturer.h ?
Tänkte om ordningen här har betydelse - att minafunk.h måste "veta" om strukturer.h? och därför borde strukturer.h ligga före minafunk.h?

//Fredrik L


Svara

Sv: Struktur som argument?

Postades av 2007-12-06 21:48:04 - Niklas Jansson

Ja, där har du tänkt rätt även om terminologin är fel, men det vanligaste är att man istället inkluderar strukturer.h ifrån minafunk.h.

Ditt argument om var du vill ha grejer köper jag däremot inte. Tanken är så här:
1. Det finns två typer av filer, header- och source-.
2. Source innehåller (nästan) all källkod.
3. Header innehåller alla deklarationer, och i en del fall lite kod (och det har tenderat att bli kod oftare).

Varje source-fil inkluderar allt den behöver, varje headerfil inkluderar allt den behöver. Allting ska alltså vara "oberoende". Du ska kunna inkludera en fil, och då får du automatiskt allt du behöver för att använda den filen.

En effekt av detta är att det blir ganska meningslöst att ha en fil med alla strukturer. Istället så bör man ha en fil som deklararerar strukturen och alla de nödvändiga, självklara funktionerna som hör till den (konvertera till sträng, etc.).

I och med det har du också en ganska märklig namngivning. Jag skulle istället ha lagt upp det som

kund.h

struct Kund
{ ... }

//Kund-specifika funktioner
//...


kund_to_file.h
#include<kund.h>

void lagra_kund(...)
...


Du tänker lite snurrigt när du säger att du vill skicka saker mellan cpp-filer. Se det istället som att du skriver koden för någon annan, hur vill den personen jobba med din kod?


Svara

Sv:Struktur som argument?

Postades av 2007-12-06 22:04:24 - Fredrik Leufkens

Ok... skall försöka strukturera om lite då.

Just den här labben som vi håller på med nu... Kommer egentligen hantera tre saker... dels kunder, artiklar och däremellan ordrar.

Så istället för att ha en fil som tar hand om all kod som filhantering från alla "delarna" så är det då alltså bättre att splittra upp och ha filhantering som hör till kund - i kund osv...

Om jag förstår dig rätt oxå så om det är så... att man vill ha enstaka globala funktioner (tex textformateringsfunktioner osv) så kan ha detta som en egen fil - och att den inkluderas i de andra includefilerna som man har...?

//Fredrik Leufkens


Svara

Sv: Struktur som argument?

Postades av 2007-12-07 13:55:18 - Niklas Jansson

<b>>Så istället för att ha en fil som tar hand om all kod som filhantering från alla "delarna" så är det då alltså bättre att splittra upp och ha filhantering som hör till kund - i kund osv...</b>
Ja, normalt sätt är det så man lägger upp det. Men just det är lite av en balansgång, det beror på hur strukturen är uppbyggd.

I princip ska saker som inte beror av andra verkligen inte heller inkludera dem, och vice versa. Man kan tänka sig ett scenario i stil med:
-hela strukturen på alla andra grejer är väldigt fast,
-du gör ett filhanteringsbibliotek som bara ska fungera för den strukturen,
-man bara ibland vill ha filhantering, och vill man ha det vill man definitivt ha det för hela strukturen.

Då kan det vara vettigt med ett upplägg i stil med det du beskrev. Men det vanligaste är snarare att varje entitet (t.ex. kund) innehåller allt det själv behöver.

<b>>Om jag förstår dig rätt oxå så om det är så... att man vill ha enstaka globala funktioner (tex textformateringsfunktioner osv) så kan ha detta som en egen fil - och att den inkluderas i de andra includefilerna som man har...?</b>
Låter mycket vettigt i ett imperativt språk som C++.

Sen kan jag också tipsa om att du nog bör namnge på engelska, det blir i stort sett alltid snyggare.


Svara

Nyligen

  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino
  • 14:15 Indian online casino
  • 08:28 Butiksskyltar: Hur upplever utbude

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 570 868
27 965
271 770
475
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