handdator

Visa fullständig version : c++ fråga, hjälp


Kebab-Arne
2005-01-05, 15:18
Tjosan.

Hur gör man om man ska inkludera en fil med uppgifter, i detta fall för kontonummer. Så att man inkluderar den utomstående filen. Har tänkt att man skriver inte namn och sitt lösen(nummer) för att göra uttag/inntag. Namnen och lösen finns sedan i den utomstående filen.

Jag har det mesta klart för mig förutom denna lilla bit. :)

Grahn
2005-01-05, 15:20
Du får väl läsa in den dynamiskt dvs i programmet, visst kan du göra en include men då måste den ju formuleras som kod.

Munter
2005-01-05, 15:24
Läs in dynamiskt från disk (se <fstream>, <iostream> o.s.v) eller använd en databas. Fattar inte alls vad du ska göra, så kan inte ge mer hjälp. Lösenord i klartext är ajja-bajja, och alla databaser jag vet av har ju rejäl kryptering för lagrade lösenord... så det brukar fungera bra i de flesta fall.

Kebab-Arne
2005-01-09, 20:25
Får tacka för svaren jag fick tidigare, dock hade jag ingen större koll på programmet i övrigt. Håller på med ett annat lättare just nu. Men med samma include funktion som jag löste. Programmet ska vara som tänkt för en möbelaffär, där jag lagt in 5 påhittade möbler och information om dessa. Längst ner står en av de 5 inkluderade filerna/möblerna. Det enda som skiljer är infon, pris och antal. Och har döpt de till antal_2, antal_3 osv...

Men såklart funkar inte skiten. Felmeddelande längst ner. Samma meddelande lär komma på övriga 4 inkluderade filer.

#include <iostream>
#include "vara_1.h"
#include "vara_2.h"
#include "vara_3.h"
#include "vara_4.h"
#include "vara_5.h"

using namespace std;

int main()
{
int antal;
char svar = 'j';
char svar2;
char alternativ;
int nypris;
cout << "Skriv in artikelnummer: ";
cin >> artnummer;
while (svar == 'j' || 'J'){
if (artnummer == 1234-1){
cout << "V\x84lj det du ska g\x94ra";
cout << "1. Information om varan och pris";
cout << "2. Se hur m\x84nga som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och \x84ndra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << info_1 << pris_1 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_1 << "st. p\x86 lagret";
cout << Vill du s\x84tta in nya på lagret eller ta ut nya från lagret? (j/n);
cin >> svar2;
if (svar2 == 'j' || 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte s\x84 m\x84nga p\x84 lagret." << /a /n;
}
else{
break;
}
}
else{
break;
}
case '3':
cout << pris_1 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_1 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning /a /n";



cout << "Vill du s\x94ka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}

else if (artnummer == 1234-2){
cout << "V\x84lj det du ska g\x94ra";
cout << "1. Information om varan och pris";
cout << "2. Se hur m\x84nga som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och \x84ndra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << info_2 << pris_2 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_2 << "st. p\x86 lagret";
cout << Vill du s\x84tta in nya på lagret eller ta ut nya från lagret? (j/n);
cin >> svar2;
if (svar2 == 'j' || 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte s\x84 m\x84nga p\x84 lagret." << /a /n;
}
else{
break;
}
}
else{
break;
case '3':
cout << pris_2 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_2 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning /a /n";



cout << "Vill du s\x94ka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}


else if (artnummer == 1234-3){
cout << "V\x84lj det du ska g\x94ra";
cout << "1. Information om varan och pris";
cout << "2. Se hur m\x84nga som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och \x84ndra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << info_3 << pris_3 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_3 << "st. p\x86 lagret";
cout << Vill du s\x84tta in nya på lagret eller ta ut nya från lagret? (j/n);
cin >> svar2;
if (svar2 == 'j' || 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte s\x84 m\x84nga p\x84 lagret." << /a /n;
}
else{
break;
}
}
else{
break;

case '3':
cout << pris_3 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_2 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning /a /n";



cout << "Vill du s\x94ka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}

else if (artnummer == 1234-4){
cout << "V\x84lj det du ska g\x94ra";
cout << "1. Information om varan och pris";
cout << "2. Se hur m\x84nga som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och \x84ndra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << info_4 << pris_4 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_4 << "st. p\x86 lagret";
cout << Vill du s\x84tta in nya på lagret eller ta ut nya från lagret? (j/n);
cin >> svar2;
if (svar2 == 'j' || 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte s\x84 m\x84nga p\x84 lagret." << /a /n;
}
else{
break;
}
}
else{
break;

case '3':
cout << pris_4 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_2 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning /a /n";



cout << "Vill du s\x94ka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}

else if {artnummer == 1234-5){
cout << "V\x84lj det du ska g\x94ra";
cout << "1. Information om varan och pris";
cout << "2. Se hur m\x84nga som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och \x84ndra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << info_5 << pris_5 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_5 << "st. p\x86 lagret";
cout << Vill du s\x84tta in nya på lagret eller ta ut nya från lagret? (j/n);
cin >> svar2;
if (svar2 == 'j' || 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte s\x84 m\x84nga p\x84 lagret." << /a /n;
}
else{
break;
}
}
else{
break;

case '3':
cout << pris_5 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_2 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning /a /n";



cout << "Vill du s\x94ka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}


else{
cout << "Artikelnummret existerar inte /a /n";
}
}
return 0;
}

-----------


class vara 1234-1 {
public:
char info_1 = Brunt skrivbord. Fabrikat: Cheoa. Ej tillverkat av regnskogstr\x84d. Egen ihops\x84ttning, M\x86tt: L:140. B:58cm. H: 62cm;
int antal_1 = 6;
int pris_1 = 870;

};


----


--------------------Configuration: varulager - Win32 Debug--------------------
Compiling...
varulager.cpp
d:\jonas\c++\varulager\vara_1.h(1) : error C2143: syntax error : missing ';' before 'constant'
d:\jonas\c++\varulager\vara_1.h(1) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

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

DarthHolm
2005-01-09, 20:29
Du ska få ett tips på en metod som jag alltid använder mig av på programmeringslektionerna.

http://www.mousebreaker.net/games/bmxbackflips/play.php


:D

Agent Orange
2005-01-09, 20:35
while (svar == 'j' || 'J'){

Orkade inte läsa allt men den här satsen gör inte det du vill. Operatorn || förväntar sig två villkorsuttryck. Högerledet 'J' kommer alltså tolkas som ett villkorsuttryck, och i och med att 'J' är skiljt från falskt är högerledet sant oavsett innehållet i svar.

Du menar
while (svar == 'j' || svar == 'J')

Såg att du gjorde samma fel på fler ställen.

Kebab-Arne
2005-01-09, 20:38
Orkade inte läsa allt men den här satsen gör inte det du vill. Operatorn || förväntar sig två villkorsuttryck. Högerledet 'J' kommer alltså tolkas som ett villkorsuttryck, och i och med att 'J' är skiljt från falskt är högerledet sant oavsett innehållet i svar.

Du menar


Såg att du gjorde samma fel på fler ställen.
Aa fan, det stämmer :em:

Tackar

JAM
2005-01-09, 21:29
Läs in dynamiskt från disk (se <fstream>, <iostream> o.s.v) eller använd en databas. Fattar inte alls vad du ska göra, så kan inte ge mer hjälp. Lösenord i klartext är ajja-bajja, och alla databaser jag vet av har ju rejäl kryptering för lagrade lösenord... så det brukar fungera bra i de flesta fall.
...eller så sparas inte lösenordet överhuvudtaget, utan endast en hashning av det.

JAM
2005-01-09, 21:38
Får tacka för svaren jag fick tidigare, dock hade jag ingen större koll på programmet i övrigt. Håller på med ett annat lättare just nu. Men med samma include funktion som jag löste. Programmet ska vara som tänkt för en möbelaffär, där jag lagt in 5 påhittade möbler och information om dessa. Längst ner står en av de 5 inkluderade filerna/möblerna. Det enda som skiljer är infon, pris och antal. Och har döpt de till antal_2, antal_3 osv...

Men såklart funkar inte skiten. Felmeddelande längst ner. Samma meddelande lär komma på övriga 4 inkluderade filer.

#include <iostream>

[......................................]

Error executing cl.exe.

varulager.exe - 2 error(s), 0 warning(s)
Klistra in din kod mellan två CODE-taggar så behåller du indenteringen. Det är lite lättare att läsa då. Fixar det:

#include <iostream>
#include "vara_1.h"
#include "vara_2.h"
#include "vara_3.h"
#include "vara_4.h"
#include "vara_5.h"

using namespace std;

int main()
{
int antal;
char svar = 'j';
char svar2;
char alternativ;
int nypris;
cout << "Skriv in artikelnummer: ";
cin >> artnummer;
while (svar == 'j' || 'J'){
if (artnummer == 1234-1){
cout << "V\x84lj det du ska g\x94ra";
cout << "1. Information om varan och pris";
cout << "2. Se hur m\x84nga som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och \x84ndra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << info_1 << pris_1 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_1 << "st. p\x86 lagret";
cout << Vill du s\x84tta in nya på lagret eller ta ut nya från lagret? (j/n);
cin >> svar2;
if (svar2 == 'j' || 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte s\x84 m\x84nga p\x84 lagret." << /a /n;
}
else{
break;
}
}
else{
break;
}
case '3':
cout << pris_1 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_1 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning /a /n";



cout << "Vill du s\x94ka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}

else if (artnummer == 1234-2){
cout << "V\x84lj det du ska g\x94ra";
cout << "1. Information om varan och pris";
cout << "2. Se hur m\x84nga som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och \x84ndra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << info_2 << pris_2 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_2 << "st. p\x86 lagret";
cout << Vill du s\x84tta in nya på lagret eller ta ut nya från lagret? (j/n);
cin >> svar2;
if (svar2 == 'j' || 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte s\x84 m\x84nga p\x84 lagret." << /a /n;
}
else{
break;
}
}
else{
break;
case '3':
cout << pris_2 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_2 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning /a /n";



cout << "Vill du s\x94ka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}


else if (artnummer == 1234-3){
cout << "V\x84lj det du ska g\x94ra";
cout << "1. Information om varan och pris";
cout << "2. Se hur m\x84nga som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och \x84ndra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << info_3 << pris_3 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_3 << "st. p\x86 lagret";
cout << Vill du s\x84tta in nya på lagret eller ta ut nya från lagret? (j/n);
cin >> svar2;
if (svar2 == 'j' || 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte s\x84 m\x84nga p\x84 lagret." << /a /n;
}
else{
break;
}
}
else{
break;

case '3':
cout << pris_3 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_2 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning /a /n";



cout << "Vill du s\x94ka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}

else if (artnummer == 1234-4){
cout << "V\x84lj det du ska g\x94ra";
cout << "1. Information om varan och pris";
cout << "2. Se hur m\x84nga som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och \x84ndra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << info_4 << pris_4 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_4 << "st. p\x86 lagret";
cout << Vill du s\x84tta in nya på lagret eller ta ut nya från lagret? (j/n);
cin >> svar2;
if (svar2 == 'j' || 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte s\x84 m\x84nga p\x84 lagret." << /a /n;
}
else{
break;
}
}
else{
break;

case '3':
cout << pris_4 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_2 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning /a /n";



cout << "Vill du s\x94ka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}

else if {artnummer == 1234-5){
cout << "V\x84lj det du ska g\x94ra";
cout << "1. Information om varan och pris";
cout << "2. Se hur m\x84nga som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och \x84ndra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << info_5 << pris_5 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_5 << "st. p\x86 lagret";
cout << Vill du s\x84tta in nya på lagret eller ta ut nya från lagret? (j/n);
cin >> svar2;
if (svar2 == 'j' || 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte s\x84 m\x84nga p\x84 lagret." << /a /n;
}
else{
break;
}
}
else{
break;

case '3':
cout << pris_5 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_2 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning /a /n";



cout << "Vill du s\x94ka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}


else{
cout << "Artikelnummret existerar inte /a /n";
}
}
return 0;
}


Du får ge lite mer info om den här lösenordsfilen. Är det en ren textfil? På vilken form lagras datat? Kommer den att ligga i samma mapp som programmet?

Kreout
2005-01-09, 22:08
class vara 1234-1 {
public:
char info_1 = Brunt skrivbord. Fabrikat: Cheoa. Ej tillverkat av regnskogstr\x84d. Egen ihops\x84ttning, M\x86tt: L:140. B:58cm. H: 62cm;
int antal_1 = 6;
int pris_1 = 870;

};



Om det här är .h-filen det klagas på är det inte konstigt. Du får inte använda "-" eller mellanslag i variabelnamn/klassnamn, använd istället "_". Döp alltså om klassen till t.ex "vara_1234_1". Raden med:

char info_1 = Brunt....................;

ska vara

char *info_1 = "Brunt.......";

och du behöver inte använ da specialkoder för svenska tecken, skriv dom direkt i texten som vanligt.

Kebab-Arne
2005-01-09, 22:46
Om det här är .h-filen det klagas på är det inte konstigt. Du får inte använda "-" eller mellanslag i variabelnamn/klassnamn, använd istället "_". Döp alltså om klassen till t.ex "vara_1234_1". Raden med:

char info_1 = Brunt....................;

ska vara

char *info_1 = "Brunt.......";

och du behöver inte använ da specialkoder för svenska tecken, skriv dom direkt i texten som vanligt.

Ahh, tackar så mycket!

Men nu gillar han inte char längre. det är för litet. Finns det något större som man kan spara texter i?

--------------------Configuration: varulager - Win32 Debug--------------------
Compiling...
varulager.cpp
d:\jonas\c++\varulager\vara_1.h(3) : error C2022: '2125' : too big for character
d:\jonas\c++\varulager\vara_1.h(3) : error C2258: illegal pure syntax, must be '= 0'
d:\jonas\c++\varulager\vara_1.h(3) : error C2252: 'info_1' : pure specifier can only be specified for functions
d:\jonas\c++\varulager\vara_1.h(4) : error C2258: illegal pure syntax, must be '= 0'
d:\jonas\c++\varulager\vara_1.h(4) : error C2252: 'antal_1' : pure specifier can only be specified for functions
d:\jonas\c++\varulager\vara_1.h(5) : error C2258: illegal pure syntax, must be '= 0'
d:\jonas\c++\varulager\vara_1.h(5) : error C2252: 'pris_1' : pure specifier can only be specified for functions
d:\jonas\c++\varulager\vara_2.h(3) : error C2022: '38078' : too big for character
d:\jonas\c++\varulager\vara_2.h(3) : error C2258: illegal pure syntax, must be '= 0'
d:\jonas\c++\varulager\vara_2.h(3) : error C2252: 'info_2' : pure specifier can only be specified for functions
d:\jonas\c++\varulager\vara_2.h(4) : error C2258: illegal pure syntax, must be '= 0'
d:\jonas\c++\varulager\vara_2.h(4) : error C2252: 'antal_2' : pure specifier can only be specified for functions
d:\jonas\c++\varulager\vara_2.h(5) : error C2258: illegal pure syntax, must be '= 0'
d:\jonas\c++\varulager\vara_2.h(5) : error C2252: 'pris_2' : pure specifier can only be specified for functions
d:\jonas\c++\varulager\vara_3.h(3) : error C2258: illegal pure syntax, must be '= 0'
d:\jonas\c++\varulager\vara_3.h(3) : error C2252: 'info_3' : pure specifier can only be specified for functions
d:\jonas\c++\varulager\vara_3.h(4) : error C2258: illegal pure syntax, must be '= 0'
d:\jonas\c++\varulager\vara_3.h(4) : error C2252: 'antal_3' : pure specifier can only be specified for functions
d:\jonas\c++\varulager\vara_3.h(5) : error C2258: illegal pure syntax, must be '= 0'
d:\jonas\c++\varulager\vara_3.h(5) : error C2252: 'pris_3' : pure specifier can only be specified for functions
d:\jonas\c++\varulager\vara_4.h(3) : error C2258: illegal pure syntax, must be '= 0'
d:\jonas\c++\varulager\vara_4.h(3) : error C2252: 'info_4' : pure specifier can only be specified for functions
d:\jonas\c++\varulager\vara_4.h(4) : error C2252: 'antal_4' : pure specifier can only be specified for functions
d:\jonas\c++\varulager\vara_4.h(5) : error C2258: illegal pure syntax, must be '= 0'
d:\jonas\c++\varulager\vara_4.h(5) : error C2252: 'pris_4' : pure specifier can only be specified for functions
d:\jonas\c++\varulager\vara_5.h(3) : error C2022: '34013' : too big for character
d:\jonas\c++\varulager\vara_5.h(3) : error C2258: illegal pure syntax, must be '= 0'
d:\jonas\c++\varulager\vara_5.h(3) : error C2252: 'info_5' : pure specifier can only be specified for functions
d:\jonas\c++\varulager\vara_5.h(4) : error C2258: illegal pure syntax, must be '= 0'
d:\jonas\c++\varulager\vara_5.h(4) : error C2252: 'antal_5' : pure specifier can only be specified for functions
d:\jonas\c++\varulager\vara_5.h(5) : error C2258: illegal pure syntax, must be '= 0'
d:\jonas\c++\varulager\vara_5.h(5) : error C2252: 'pris_5' : pure specifier can only be specified for functions
D:\Jonas\C++\varulager\varulager.cpp(30) : error C2065: 'info_1' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(30) : error C2065: 'pris_1' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(33) : error C2065: 'antal_1' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(41) : error C2059: syntax error : '/'
D:\Jonas\C++\varulager\varulager.cpp(74) : error C2065: 'info_2' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(74) : error C2065: 'pris_2' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(77) : error C2065: 'antal_2' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(85) : error C2059: syntax error : '/'
D:\Jonas\C++\varulager\varulager.cpp(110) : error C2181: illegal else without matching if
D:\Jonas\C++\varulager\varulager.cpp(118) : error C2065: 'info_3' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(118) : error C2065: 'pris_3' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(121) : error C2065: 'antal_3' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(129) : error C2059: syntax error : '/'
D:\Jonas\C++\varulager\varulager.cpp(154) : error C2181: illegal else without matching if
D:\Jonas\C++\varulager\varulager.cpp(162) : error C2065: 'info_4' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(162) : error C2065: 'pris_4' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(165) : error C2065: 'antal_4' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(173) : error C2059: syntax error : '/'
D:\Jonas\C++\varulager\varulager.cpp(198) : error C2181: illegal else without matching if
D:\Jonas\C++\varulager\varulager.cpp(198) : error C2059: syntax error : '{'
D:\Jonas\C++\varulager\varulager.cpp(198) : error C2143: syntax error : missing ';' before '{'
D:\Jonas\C++\varulager\varulager.cpp(198) : error C2059: syntax error : ')'
D:\Jonas\C++\varulager\varulager.cpp(198) : error C2143: syntax error : missing ';' before '{'
D:\Jonas\C++\varulager\varulager.cpp(198) : warning C4553: '==' : operator has no effect; did you intend '='?
D:\Jonas\C++\varulager\varulager.cpp(206) : error C2065: 'info_5' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(206) : error C2065: 'pris_5' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(209) : error C2065: 'antal_5' : undeclared identifier
D:\Jonas\C++\varulager\varulager.cpp(217) : error C2059: syntax error : '/'
D:\Jonas\C++\varulager\varulager.cpp(243) : error C2181: illegal else without matching if
D:\Jonas\C++\varulager\varulager.cpp(249) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

varulager.exe - 61 error(s), 1 warning(s)

:D

aliquis
2005-01-09, 22:59
en char rymmer ju bara ett tecken, du får ju göra en charvektor/pekare.

Kreout
2005-01-09, 23:03
Ahh, tackar så mycket!

Men nu gillar han inte char längre. det är för litet. Finns det något större som man kan spara texter i?



Förlåt, tänkte inte på att man inte får tilldela värden till variabler i klassdefinitionen (om de inte är statiska). Det korrekta sättet är att skapa en constructor, alltså en funktion för initiering av klassen, så här (förutsatt att klassen heter "vara_1234_1"):

class vara_1234_1 {
public:
char *info_1;
int antal_1;
int pris_1;

vara_1234_1(); // Constructor-funktion
~vara_1234_1(); // Destructor-funktion
};

vara_1234_1::vara_1234_1()
{
char *tmp = "Brunt skrivbord. Fabrikat: Cheoa. Ej tillverkat av regnskogsträd. Egen ihopsättning, Mått: L:140. B:58cm. H: 62cm";
info_1 = tmp;

antal_1 = 6;
pris_1 = 870;
}

vara_1234_1::~vara_1234_1()
{
if (info_1 != NULL) delete [] info_1;
info_1 = NULL:
}


i constructorfunktionen lägger du alla initieringar av data. I det här fallet la jag in en tmp-variabel eftersom man bara kan tilldela text till en *char vid skapandet av variabeln. Om jag skulle lägga texten direkt i info_1 skulle jag behöva använda t.ex strcpy() och new för att först skapa utrymme för all text i variabeln, och sedan kopiera texten in i variabeln. På det här sättet skapas en tillfällig variabel (som dock inte tas bort) med texten, och info_1 sätts så att den pekar på den andra variabeln. I destructorfunktionen gör jag så att minnet som variabeln har tagit upp frisätts, och jag ser till att info_1 inte pekar på tmp längre (behövs inte i det här fallet eftersom klassen, och därmed variabeln ändå försvinner men det är bra att alltid göra).

Ursäkta om jag har fel någonstans, jag har inte programmerat sedan juli så det kan mycket väl hända att jag har glömt något.

kelk
2005-01-10, 03:41
Går det inte att köra string istället för char?

Kebab-Arne
2005-01-10, 08:52
--------------------Configuration: varulager - Win32 Debug--------------------
Compiling...
varulager.cpp
h:\varulager\vara_1.h(24) : error C2143: syntax error : missing ';' before ':'
h:\varulager\vara_2.h(13) : error C2022: '38078' : too big for character
h:\varulager\vara_2.h(23) : error C2143: syntax error : missing ';' before ':'
h:\varulager\vara_3.h(15) : error C2065: 'info_1' : undeclared identifier
h:\varulager\vara_3.h(15) : error C2440: '=' : cannot convert from 'char *' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
h:\varulager\vara_3.h(17) : error C2065: 'antal_1' : undeclared identifier
h:\varulager\vara_3.h(18) : error C2065: 'pris_1' : undeclared identifier
h:\varulager\vara_3.h(23) : error C2541: delete : cannot delete objects that are not pointers
h:\varulager\vara_3.h(24) : error C2143: syntax error : missing ';' before ':'
h:\varulager\vara_4.h(21) : error C2143: syntax error : missing ';' before ':'
h:\varulager\vara_4.h(21) : error C2143: syntax error : missing ';' before ':'
h:\varulager\vara_4.h(21) : error C2588: '::~vara_1234_4' : illegal global destructor
h:\varulager\vara_4.h(23) : error C2065: 'info_4' : undeclared identifier
h:\varulager\vara_4.h(23) : error C2541: delete : cannot delete objects that are not pointers
h:\varulager\vara_4.h(24) : error C2143: syntax error : missing ';' before ':'
h:\varulager\vara_4.h(25) : warning C4508: 'vara_1234_4' : function should return a value; 'void' return type assumed
h:\varulager\vara_5.h(14) : error C2022: '34013' : too big for character
h:\varulager\vara_5.h(24) : error C2143: syntax error : missing ';' before ':'
h:\varulager\varulager.cpp(74) : error C2065: 'info_2' : undeclared identifier
h:\varulager\varulager.cpp(74) : error C2065: 'pris_2' : undeclared identifier
h:\varulager\varulager.cpp(77) : error C2065: 'antal_2' : undeclared identifier
h:\varulager\varulager.cpp(110) : error C2181: illegal else without matching if
h:\varulager\varulager.cpp(118) : error C2065: 'info_3' : undeclared identifier
h:\varulager\varulager.cpp(118) : error C2065: 'pris_3' : undeclared identifier
h:\varulager\varulager.cpp(121) : error C2065: 'antal_3' : undeclared identifier
h:\varulager\varulager.cpp(154) : error C2181: illegal else without matching if
h:\varulager\varulager.cpp(162) : error C2065: 'pris_4' : undeclared identifier
h:\varulager\varulager.cpp(165) : error C2065: 'antal_4' : undeclared identifier
h:\varulager\varulager.cpp(198) : error C2181: illegal else without matching if
h:\varulager\varulager.cpp(206) : error C2065: 'info_5' : undeclared identifier
h:\varulager\varulager.cpp(206) : error C2065: 'pris_5' : undeclared identifier
h:\varulager\varulager.cpp(209) : error C2065: 'antal_5' : undeclared identifier
h:\varulager\varulager.cpp(243) : error C2181: illegal else without matching if
h:\varulager\varulager.cpp(249) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

varulager.exe - 33 error(s), 1 warning(s)

Lite nya fel. =)

Förmodligen borde det gå med en string sats som Kelk var inne på!?

Men är nere på 33 fel nu. :hbang:

Kebab-Arne
2005-01-10, 09:30
Vad skumt, jag har skrivit senaste inlägget men det verkar inte synas, och är ju i behov av att bumpa upp tråden. :)

jakke
2005-01-10, 10:52
Ett allmännt felsökningstips är att provköra koden bit för bit och veta exakt innan vad som den koden ska göra. Då blir det lättare att hitta fel.

Kreout
2005-01-10, 19:54
Ett av felen är att jag råkade skriva ":" istället för ";" i slutet av min exempelkod. Ett annat verkar enligt felmeddelandena vara att du har skrivit fel i filen för klass 2 när det gäller tilldelningen av texten till *char. Kolla i första filen och jämför. Jag kan inte gissa på resten av felen i de andra filerna eftersom jag inte har sett dem. Ett bra tips är att skaffa en bok, t.ex någon "Lär dig C++ på 3 veckor" eller liknande, så att du lär dig att förstå varför det ska vara på ett visst sett istället. Då blir det mycket enklare att hitta felen.

JAM
2005-01-10, 22:11
Går det inte att köra string istället för char?
Att inte göra det kan dock kanske ge lite mer insikt i minneshanteringen. Kankse får de inte använda string?

Trance
2005-01-11, 16:50
Mitt råd är att byta till c# eller java så du får riktig och fin stränghantering. Samt grymma klassbibliotek.

Kebab-Arne
2005-01-11, 17:25
Ett av felen är att jag råkade skriva ":" istället för ";" i slutet av min exempelkod. Ett annat verkar enligt felmeddelandena vara att du har skrivit fel i filen för klass 2 när det gäller tilldelningen av texten till *char. Kolla i första filen och jämför. Jag kan inte gissa på resten av felen i de andra filerna eftersom jag inte har sett dem. Ett bra tips är att skaffa en bok, t.ex någon "Lär dig C++ på 3 veckor" eller liknande, så att du lär dig att förstå varför det ska vara på ett visst sett istället. Då blir det mycket enklare att hitta felen.

Hmm, tycker det ser likadant ut som i ettan!? Förutom det som ska skilja. Får samma fel. Fattar inte varför han klagar på att man inte deklarerat antal_1 och allt. Måste vara att han inte kan läsa filerna?
Får samtidigt passa på att tacka alla som hjälpt till!


class vara_1234_2 {
public:
char *info_2;
int antal_2;
int pris_2;

vara_1234_2(); // Constructor-funktion
~vara_1234_2(); // Destructor-funktion
};

vara_1234_2::vara_1234_2()
{
char *tmp = "M\x94rkbrun f\x86t\x94lj. Fabrikat: Albans m\x94beltillverkning. Egen ihops\x84ttning";
info_2 = tmp;

antal_2 = 4;
pris_2 = 3660;
}

vara_1234_2::~vara_1234_2()
{
if (info_2 != NULL) delete [] info_2;
info_2 = NULL;
}

Bolio
2005-01-11, 17:29
Kör på C istället så hjälper jag dig.

Trance? C#? Java? Det passar väl knappast i en sådan här sak? :)

JAM
2005-01-11, 17:58
Mitt råd är att byta till c# eller java så du får riktig och fin stränghantering. Samt grymma klassbibliotek.
Inte då. Finns väldigt många fördelar med att kunna C++ bra.

C++ har dessutom stränghantering, men de kanske inte får använda den?

Kebab-Arne
2005-01-11, 18:06
Inte då. Finns väldigt många fördelar med att kunna C++ bra.

C++ har dessutom stränghantering, men de kanske inte får använda den?

Jorå, några sådana förbud finns inte.

Bolio
2005-01-11, 18:29
> uname -r
2.6.8-bonus
> grep kmalloc /boot/System.map
5ad62ec4 A __crc_sock_kmalloc
7da8156e A __crc___kmalloc
c012f637 T __kmalloc
c0259404 T sock_kmalloc
c02ed1dc r __ksymtab___kmalloc
c02ef664 r __ksymtab_sock_kmalloc
c02f0cc8 r __kcrctab___kmalloc
c02f1f0c r __kcrctab_sock_kmalloc
c02f3f8d r __kstrtab___kmalloc
c02f8ce5 r __kstrtab_sock_kmalloc
c03adad4 b kmalloc_failed
> cat strcpy.c
#include <string.h>
#include <stdio.h>

int main(void)
{

char string[20];
strcpy(string, "knark");
printf("%s\n", string);
return 0;

}
> strace -i -T -v -x ./strcpy 2> yo
knark
> egrep -i '(read|write)' yo
[400113bd] old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40017000 <0.000021>
[400113bd] old_mmap(NULL, 38660, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40018000 <0.000039>
[40010c14] read(3, "\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x 00\x00"..., 512) = 512 <0.000034>
[400113bd] old_mmap(NULL, 1260140, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40022000 <0.000037>
[400113bd] old_mmap(0x4014b000, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x129000) = 0x4014b000 <0.000032>
[400113bd] old_mmap(0x40153000, 10860, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40153000 <0.000025>
[400113bd] old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40156000 <0.000020>
[40001f1e] set_thread_area({entry_number:-1 -> 6, base_addr:0x401562a0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 <0.000018>
[400f67b3] mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40018000 <0.000019>
[400ec40e] write(1, "knark\n", 6) = 6 <0.000252>
> objdump -D strcpy|grep dtor
08048350 <__do_global_dtors_aux>:
804835d: 75 2d jne 804838c <__do_global_dtors_aux+0x3c>
8048368: 74 1b je 8048385 <__do_global_dtors_aux+0x35>
8048383: 75 eb jne 8048370 <__do_global_dtors_aux+0x20>
8048511: e8 3a fe ff ff call 8048350 <__do_global_dtors_aux>
Disassembly of section .dtors:
>

Kör C!!!!!!!!!!!!!!!!

Kebab-Arne
2005-01-11, 18:58
Bolio: Jösses, fattar inte ett skit.

Bolio
2005-01-11, 18:59
Bolio: Jösses, fattar inte ett skit.

C == snabbare, bättre, Gud, osv. Kör C! Fuq OOP.

Kreout
2005-01-11, 19:48
Hmm, tycker det ser likadant ut som i ettan!? Förutom det som ska skilja. Får samma fel. Fattar inte varför han klagar på att man inte deklarerat antal_1 och allt. Måste vara att han inte kan läsa filerna?
Får samtidigt passa på att tacka alla som hjälpt till!


class vara_1234_2 {
public:
char *info_2;
int antal_2;
int pris_2;

vara_1234_2(); // Constructor-funktion
~vara_1234_2(); // Destructor-funktion
};

vara_1234_2::vara_1234_2()
{
char *tmp = "M\x94rkbrun f\x86t\x94lj. Fabrikat: Albans m\x94beltillverkning. Egen ihops\x84ttning";
info_2 = tmp;

antal_2 = 4;
pris_2 = 3660;
}

vara_1234_2::~vara_1234_2()
{
if (info_2 != NULL) delete [] info_2;
info_2 = NULL;
}

Som jag tidigare sade så kan du lugnt sluta använda \x och istället skriva åäö i klartext. Det är pga av dessa koder som du får t.ex:

h:\varulager\vara_2.h(13) : error C2022: '38078' : too big for character

Det är textens "Albans m\x94beltillverkning." som ställer till det genom att "\x94" direkt följs av "be" vilka också är giltiga hexadecimala siffror (38078 == 0x94BE). Prova om "\x094" fungerar, om inte så får du sätta ett annat tecken efter "\94" eller skriva tecknet i klartext.

JAM
2005-01-11, 23:58
> uname -r
2.6.8-bonus
[...........................]
<__do_global_dtors_aux+0x20>
8048511: e8 3a fe ff ff call 8048350 <__do_global_dtors_aux>
Disassembly of section .dtors:
>

Kör C!!!!!!!!!!!!!!!!
Vad ville du säga med det där till någon som inte kört C? Dessutom är väl basic-C++ i princip exakt lika snabbt som C?

Bolio
2005-01-12, 00:04
Vad ville du säga med det där till någon som inte kört C? Dessutom är väl basic-C++ i princip exakt lika snabbt som C?

Att det i C går att hantera de allra flesta syscalls och arbeta mot t.ex. O(0) schedulern epoll() mycket mycket snabbare än i OOP-språk? Förutsatt att man inte orkar koda inline asm. C producerar snabbare, stabilare och helt enkelt bättre kod. C++ är däremot enklare att jobba med om man håller på med stora projekt och är flera stycken, vilket inte verkar vara fallet här.

jakke
2005-01-12, 00:06
Att det i C går att hantera de allra flesta syscalls och arbeta mot t.ex. O(0) schedulern epoll() mycket mycket snabbare än i OOP-språk? Förutsatt att man inte orkar koda inline asm. C producerar snabbare, stabilare och helt enkelt bättre kod. C++ är däremot enklare att jobba med om man håller på med stora projekt och är flera stycken, vilket inte verkar vara fallet här.
nä, men så är väll denna uppgift en simpel liten historia från gymnasiet!

Bolio
2005-01-12, 00:07
nä, men så är väll denna uppgift en simpel liten historia från gymnasiet!

Fast C > C++ och det är viktigt att poängtera det varje gång det pratas om det.

Trance
2005-01-12, 00:53
Att det i C går att hantera de allra flesta syscalls och arbeta mot t.ex. O(0) schedulern epoll() mycket mycket snabbare än i OOP-språk? Förutsatt att man inte orkar koda inline asm. C producerar snabbare, stabilare och helt enkelt bättre kod. C++ är däremot enklare att jobba med om man håller på med stora projekt och är flera stycken, vilket inte verkar vara fallet här.

Tyvärr så tar det mycket längre tid och koden som produceras är också lättare felaktig. Men jag antar att det är en smaksak. Hastigheten är ingen stor skillnad i de flesta programmen, och stabilare kod håller jag som sagt inte med om. Memory leaks..

Bolio
2005-01-12, 01:01
Tyvärr så tar det mycket längre tid och koden som produceras är också lättare felaktig. Men jag antar att det är en smaksak. Hastigheten är ingen stor skillnad i de flesta programmen, och stabilare kod håller jag som sagt inte med om. Memory leaks..

Vad tar längre tid? Hur kan kod som produceras vara felaktig? Du menar t.ex. buffer overflows, integer overflows, off-by-one bugs, double free() exploitation och liknande? Visst är det svårt att koda C, men tror du verkligen på fullaste allvar att sådant inte finns i exakt lika stor utsträckning, om inte större, i C++?

Om man jämför andelen malloc()-, calloc()-, realloc()- och free()-relaterade buggar i C med new och delete i C++ är det inte särskilt svårt att inse att det uppstår fler farliga buggar i C++. Och jag har själv kodat 0day till C++-kod fler gånger än till C-kod.

Trance
2005-01-12, 01:04
Vad tar längre tid? Hur kan kod som produceras vara felaktig? Du menar t.ex. buffer overflows, integer overflows, off-by-one bugs, double free() exploitation och liknande? Visst är det svårt att koda C, men tror du verkligen på fullaste allvar att sådant inte finns i exakt lika stor utsträckning, om inte större, i C++?

Om man jämför andelen malloc()-, calloc()-, realloc()- och free()-relaterade buggar i C med new och delete i C++ är det inte särskilt svårt att inse att det uppstår fler farliga buggar i C++. Och jag har själv kodat 0day till C++-kod fler gånger än till C-kod.


Mmm, jag jämförde med C#. Jag är lite trött så jag följer inte alltid med i diskussionen.

Tacka vet jag "ArrayList list = new ArrayList();" t.ex. Det är så bekvämt, går aldrig tillbaka till c :D

Bolio
2005-01-12, 01:09
Mmm, jag jämförde med C#. Jag är lite trött så jag följer inte alltid med i diskussionen.

Tacka vet jag "ArrayList list = new ArrayList();" t.ex. Det är så bekvämt, går aldrig tillbaka till c :D

Jag som respekterade dig. :///////////////////////////

C# && Java suqz m4j0r d1q 4real d0ud.

Kreout
2005-01-12, 05:43
bolio: För många, inklusive mig när jag arbetade med det, så handlar valet av programspråk om effektivitet samt strukturering. Jag håller med om att C är "renare" för många uppgifter, men när du arbetar med ett stort projekt med flera medprogrammerare, och som alltid har tidsbrist, så är det rätt skönt med C++. OOP uppmuntrar dessutom till bättre dokumentation och struktur av källkoden (för de med dålig disciplin). Att jag har hädat och använt t.ex MFC för att få ramverket till stora projekt klara i tid och med enkla möjligheter att snabbt lägga till callbacks och GUI-funktioner står jag helt för. Att sälja sin själ till djävulen är bara en av nackdelarna med att programmera för pengar ;) .

Kebab-Arne
2005-01-12, 17:05
--------------------Configuration: varulager - Win32 Debug--------------------
Compiling...
varulager.cpp
d:\jonas\dfhg\vara_3.h(23) : error C2065: 'info_1' : undeclared identifier
d:\jonas\dfhg\vara_3.h(23) : error C2541: delete : cannot delete objects that are not pointers
d:\jonas\dfhg\varulager.cpp(30) : error C2065: 'pris_1' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(33) : error C2065: 'antal_1' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(66) : error C2181: illegal else without matching if
d:\jonas\dfhg\varulager.cpp(74) : error C2065: 'info_2' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(74) : error C2065: 'pris_2' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(77) : error C2065: 'antal_2' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(118) : error C2065: 'info_3' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(118) : error C2065: 'pris_3' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(121) : error C2065: 'antal_3' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(164) : error C2065: 'info_4' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(164) : error C2065: 'pris_4' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(167) : error C2065: 'antal_4' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(209) : error C2065: 'info_5' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(209) : error C2065: 'pris_5' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(212) : error C2065: 'antal_5' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(252) : error C2143: syntax error : missing ';' before '}'
d:\jonas\dfhg\varulager.cpp(252) : error C2143: syntax error : missing ';' before '}'
d:\jonas\dfhg\varulager.cpp(252) : error C2143: syntax error : missing ';' before '}'
Error executing cl.exe.

varulager.exe - 20 error(s), 0 warning(s)

Hmm så här ser felen ut nu, efter att jag tagit bort de svenska tecknen (tack kreout) ska lägga in hela källkoden senare ikväll, hinner inte just nu.

jwzrd
2005-01-12, 17:07
Vad tar längre tid? Hur kan kod som produceras vara felaktig? Du menar t.ex. buffer overflows, integer overflows, off-by-one bugs, double free() exploitation och liknande? Visst är det svårt att koda C, men tror du verkligen på fullaste allvar att sådant inte finns i exakt lika stor utsträckning, om inte större, i C++?

Om man jämför andelen malloc()-, calloc()-, realloc()- och free()-relaterade buggar i C med new och delete i C++ är det inte särskilt svårt att inse att det uppstår fler farliga buggar i C++. Och jag har själv kodat 0day till C++-kod fler gånger än till C-kod.

Skriv Java istället då. C++ är en aboniation av C. (Java-FUD undanbedes).

Bolio
2005-01-12, 17:17
Skriv Java istället då. C++ är en aboniation av C. (Java-FUD undanbedes).

Java är slööööööött, det har inte allt man behöver (VAFAN SKA EN CHAR VARA TVÅ BYTE FÖR? - unicode can suq my d1q). Den enda nyttan java gör är på webben och i t.ex. mobiltelefoner. Och om det finns möjlighet kör jag php istället för java anytime.

Men jag gillar Sun Microsystemz ändå, de utvecklade ju Slowlaris och SPARC after all.

C > *

Bolio
2005-01-12, 17:18
(Java-FUD undanbedes).

Oj. :P

Trance
2005-01-12, 17:19
Java är slööööööött, det har inte allt man behöver (VAFAN SKA EN CHAR VARA TVÅ BYTE FÖR? - unicode can suq my d1q). Den enda nyttan java gör är på webben och i t.ex. mobiltelefoner. Och om det finns möjlighet kör jag php istället för java anytime.

Men jag gillar Sun Microsystemz ändå, de utvecklade ju Slowlaris och SPARC after all.

C > *

Sen kan man ju också undra vad en byte hit eller dit gör med dagens datorer ;) . Java har också blivit rätt mycket snabbare, men på grund av kassa Swing så kör jag C# som är helt underbart :D .

Bolio
2005-01-12, 17:26
Sen kan man ju också undra vad en byte hit eller dit gör med dagens datorer ;) . Java har också blivit rätt mycket snabbare, men på grund av kassa Swing så kör jag C# som är helt underbart :D .

Jag kör 2.2 ghz celeron (stfu!) och då är java slooooooooooooooooow. hushmail tar ett halvår. :/

C# är java on steroids. :D

Kreout
2005-01-12, 17:36
--------------------Configuration: varulager - Win32 Debug--------------------
Compiling...
varulager.cpp
d:\jonas\dfhg\vara_3.h(23) : error C2065: 'info_1' : undeclared identifier
d:\jonas\dfhg\vara_3.h(23) : error C2541: delete : cannot delete objects that are not pointers
d:\jonas\dfhg\varulager.cpp(30) : error C2065: 'pris_1' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(33) : error C2065: 'antal_1' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(66) : error C2181: illegal else without matching if
d:\jonas\dfhg\varulager.cpp(74) : error C2065: 'info_2' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(74) : error C2065: 'pris_2' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(77) : error C2065: 'antal_2' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(118) : error C2065: 'info_3' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(118) : error C2065: 'pris_3' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(121) : error C2065: 'antal_3' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(164) : error C2065: 'info_4' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(164) : error C2065: 'pris_4' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(167) : error C2065: 'antal_4' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(209) : error C2065: 'info_5' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(209) : error C2065: 'pris_5' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(212) : error C2065: 'antal_5' : undeclared identifier
d:\jonas\dfhg\varulager.cpp(252) : error C2143: syntax error : missing ';' before '}'
d:\jonas\dfhg\varulager.cpp(252) : error C2143: syntax error : missing ';' before '}'
d:\jonas\dfhg\varulager.cpp(252) : error C2143: syntax error : missing ';' before '}'
Error executing cl.exe.

varulager.exe - 20 error(s), 0 warning(s)

Hmm så här ser felen ut nu, efter att jag tagit bort de svenska tecknen (tack kreout) ska lägga in hela källkoden senare ikväll, hinner inte just nu.

När det gäller:

d:\jonas\dfhg\vara_3.h(23) : error C2065: 'info_1' : undeclared identifier
d:\jonas\dfhg\vara_3.h(23) : error C2541: delete : cannot delete objects that are not pointers

så gissar jag på att du kanske har döpt om 'info_1' till 'info_3' i resten av vara_3.h men inte i destructorn?
De andra felen (i vaulager.cpp) gissar jag beror på att du inte referar variablerna på rätt sätt, alltså klass.variabel istället för bara variabel? Korrekt sätt är:

vara_1234_1 variabel_namn;
cout << variabel_namn.info_1;

eller:

vara_1234_1 *variabel_namn = new vara_1234_1();
cout << variabel_namn->info_1;

inte:

cout << info_1;

Hade du velat ha en mer generell klass hade du kunnat göra så här:

class vara {
public:
char *info;
int antal;
int pris;

vara();
vara(char decription, int nantal, int npris);
Init(char description, int nantal, int npris);
~vara();
};

vara::vara()
{
info = NULL;
antal = 0;
pris = 0;
}

vara::vara(char decription, int nantal, int npris)
{
Init(description, nantal, npris);
}

vara::Init(char decription, int nantalm int npris)
{
if (info != NULL)
{
delete [] info;
info = NULL;
}

if (description != NULL)
{
info = new char(strlen(description)+1);
strcpy(info, description);
}
antal = nantal;
pris = npris;
}

vara::~vara()
{
if (info != NULL) delete [] info;
info = NULL;
}

Och i huvudfilen göra såhär:

#include "vara.h"

void main(void)
{
vara *varor = new vara(3);
varor[0]->Init("Möbel1. Teak", 1, 163);
varor[1]->Init("Möbel2. Lönn", 3, 62);
varor[2]->Init("Möbel3. Hevea", 5, 1700);

cout << varor[1]->info;

delete [] varor;

}


Eller:

void main(void)
{
vara varor[3] = {"Möbel1. Teak", 1, 163,
"Möbel2. Lönn", 3, 62,
"Möbel3. Hevea", 5, 1700};

cout << varor[1].info;
}

Lycka till, och bli inte förvånad om jag har skrivit fel eller glömt något i koden.

Kebab-Arne
2005-01-12, 19:41
När det gäller:

d:\jonas\dfhg\vara_3.h(23) : error C2065: 'info_1' : undeclared identifier
d:\jonas\dfhg\vara_3.h(23) : error C2541: delete : cannot delete objects that are not pointers

så gissar jag på att du kanske har döpt om 'info_1' till 'info_3' i resten av vara_3.h men inte i destructorn?
De andra felen (i vaulager.cpp) gissar jag beror på att du inte referar variablerna på rätt sätt, alltså klass.variabel istället för bara variabel? Korrekt sätt är:

vara_1234_1 variabel_namn;
cout << variabel_namn.info_1;

eller:

vara_1234_1 *variabel_namn = new vara_1234_1();
cout << variabel_namn->info_1;

inte:

cout << info_1;

Hade du velat ha en mer generell klass hade du kunnat göra så här:

class vara {
public:
char *info;
int antal;
int pris;

vara();
vara(char decription, int nantal, int npris);
Init(char description, int nantal, int npris);
~vara();
};

vara::vara()
{
info = NULL;
antal = 0;
pris = 0;
}

vara::vara(char decription, int nantal, int npris)
{
Init(description, nantal, npris);
}

vara::Init(char decription, int nantalm int npris)
{
if (info != NULL)
{
delete [] info;
info = NULL;
}

if (description != NULL)
{
info = new char(strlen(description)+1);
strcpy(info, description);
}
antal = nantal;
pris = npris;
}

vara::~vara()
{
if (info != NULL) delete [] info;
info = NULL;
}

Och i huvudfilen göra såhär:

#include "vara.h"

void main(void)
{
vara *varor = new vara(3);
varor[0]->Init("Möbel1. Teak", 1, 163);
varor[1]->Init("Möbel2. Lönn", 3, 62);
varor[2]->Init("Möbel3. Hevea", 5, 1700);

cout << varor[1]->info;

delete [] varor;

}


Eller:

void main(void)
{
vara varor[3] = {"Möbel1. Teak", 1, 163,
"Möbel2. Lönn", 3, 62,
"Möbel3. Hevea", 5, 1700};

cout << varor[1].info;
}

Lycka till, och bli inte förvånad om jag har skrivit fel eller glömt något i koden.

Det var mycket, det ska vi testa!

Tack!

aliquis
2005-01-12, 21:14
Java är slööööööött, det har inte allt man behöver (VAFAN SKA EN CHAR VARA TVÅ BYTE FÖR? - unicode can suq my d1q). Den enda nyttan java gör är på webben och i t.ex. mobiltelefoner. Och om det finns möjlighet kör jag php istället för java anytime.
Men jag gillar Sun Microsystemz ändå, de utvecklade ju Slowlaris och SPARC after all.
C > *
http://www.osnews.com/comment.php?news_id=9373
"Sun Microsystems CEO Scott McNealy spoke with IDG News Service correspondent Robert McMillan about company changes, plans for 2005 and how open source relates to Solaris and Java."

http://www.infoworld.com/article/05/01/10/HNmcnealyqanda_1.html
"McNealy: Well imagine we hadn't done Java 10 years ago, where do you think Sun would be today? It would be all Windows. We'd be done. If people aren't writing Java Web services, they're writing to .Net. If they write to .Net they write to Windows. If they write to Windows, they don't write to Sun equipment."

Solaris har ju uppenbara problem att hålla sig flytande med Solaris och Sparc dock.. Tryckt in över 500 miljoner dollar i utvecklingen av Solaris 10, och inget säger ju att det hjälper. Fortsätter ju dock utvecklingen av Sparc trots att de har börjat med Opteron också, frågan är ju dock hur det går. Kul att de finns trots allt.

Vad gäller språken så är väl användandet av systemresurser totalt ointressant för hans lilla uppgift.

Java, OCaml och Ruby är ju tusen ggr mer intressanta än C :D, Eiffel med kanske? :)

Bolio
2005-01-12, 21:21
http://www.osnews.com/comment.php?news_id=9373
"Sun Microsystems CEO Scott McNealy spoke with IDG News Service correspondent Robert McMillan about company changes, plans for 2005 and how open source relates to Solaris and Java."

http://www.infoworld.com/article/05/01/10/HNmcnealyqanda_1.html
"McNealy: Well imagine we hadn't done Java 10 years ago, where do you think Sun would be today? It would be all Windows. We'd be done. If people aren't writing Java Web services, they're writing to .Net. If they write to .Net they write to Windows. If they write to Windows, they don't write to Sun equipment."

Solaris har ju uppenbara problem att hålla sig flytande med Solaris och Sparc dock.. Tryckt in över 500 miljoner dollar i utvecklingen av Solaris 10, och inget säger ju att det hjälper. Fortsätter ju dock utvecklingen av Sparc trots att de har börjat med Opteron också, frågan är ju dock hur det går. Kul att de finns trots allt.

Vad gäller språken så är väl användandet av systemresurser totalt ointressant för hans lilla uppgift.

Java, OCaml och Ruby är ju tusen ggr mer intressanta än C :D, Eiffel med kanske? :)

Jag gillar SunOS/Solaris och SPARC. Kodar du SPARC-ASM? Det är nice. IA-32 är också nice, men SPARC har helt klart sina fördelar.

Ja, användandet av systemresurser är totalt ointressant för hans lilla uppgift, men jag berättar för honom att C > C++, och det är intressant om han ska fortsätta koda.

Java suger, Ruby har sin charm, men 1) jag gillar inte OOP och 2) det är inget programmeringsspråk. OCaml håller jag med om. Jag har kodat en del AI i det t.ex...

Edit: Men C är helt klart mest användbart i de flesta lägen.

Kebab-Arne
2005-01-12, 21:32
include <iostream>
#include "vara_1.h"
#include "vara_2.h"
#include "vara_3.h"
#include "vara_4.h"
#include "vara_5.h"

using namespace std;

int main()
{
int antal;
int artnummer;
char svar = 'j';
char svar2;
char alternativ;
int nypris;
cout << "Skriv in artikelnummer: ";
cin >> artnummer;
while (svar == 'j' || svar == 'J'){
if (artnummer == 1234-1){
cout << "Välj det du ska göra";
cout << "1. Information om varan och pris";
cout << "2. Se hur många som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och ändra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << cout << vara_1234_1.info_1 << vara_1234_1.pris_1 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_1 << "st. p\x86 lagret";
cout << "Vill du sätta in nya på lagret eller ta ut nya från lagret? (j/n)";
cin >> svar2;
if (svar2 == 'j' || svar2 == 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte så många på lagret.";
}
else{
break;
}
}
else{
break;
}
case '3':
cout << pris_1 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_1 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning";
}


cout << "Vill du s\x94ka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}

else if (artnummer == 1234-2){
cout << "V\x84lj det du ska g\x94ra";
cout << "1. Information om varan och pris";
cout << "2. Se hur m\x84nga som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och \x84ndra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << info_2 << pris_2 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_2 << "st. p\x86 lagret";
cout << "Vill du s\x84tta in nya på lagret eller ta ut nya från lagret? (j/n)";
cin >> svar2;
if (svar2 == 'j' || svar2 == 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte s\x84 m\x84nga p\x84 lagret.";
}
else{
break;
}
}
else{
break;
case '3':
cout << pris_2 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_2 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning";
}


cout << "Vill du söka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}


else if (artnummer == 1234-3){
cout << "V\x84lj det du ska g\x94ra";
cout << "1. Information om varan och pris";
cout << "2. Se hur m\x84nga som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och \x84ndra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << info_3 << pris_3 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_3 << "st. p\x86 lagret";
cout << "Vill du s\x84tta in nya på lagret eller ta ut nya från lagret? (j/n)";
cin >> svar2;
if (svar2 == 'j' || svar2 == 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte s\x84 m\x84nga p\x84 lagret.";
}
else{
break;
}
}
else{
break;

case '3':
cout << pris_3 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_2 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning";
}




cout << "Vill du s\x94ka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}

else if (artnummer == 1234-4){
cout << "V\x84lj det du ska g\x94ra";
cout << "1. Information om varan och pris";
cout << "2. Se hur m\x84nga som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och \x84ndra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << info_4 << pris_4 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_4 << "st. p\x86 lagret";
cout << "Vill du s\x84tta in nya på lagret eller ta ut nya från lagret? (j/n)";
cin >> svar2;
if (svar2 == 'j' || svar2 == 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte s\x84 m\x84nga p\x84 lagret.";
}
else{
break;
}
}
else{
break;

case '3':
cout << pris_4 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_2 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning";
}



cout << "Vill du s\x94ka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}

else if (artnummer == 1234-5){
cout << "V\x84lj det du ska g\x94ra";
cout << "1. Information om varan och pris";
cout << "2. Se hur m\x84nga som finns i lager, och \x86ndra p\x86 det";
cout << "3. Se och \x84ndra pris";
cin >> alternativ;
switch (alternativ){
case '1':
cout << info_5 << pris_5 <<"kr.";
break;
case '2':
cout << "Det finns" << antal_5 << "st. p\x86 lagret";
cout << "Vill du s\x84tta in nya på lagret eller ta ut nya från lagret? (j/n)";
cin >> svar2;
if (svar2 == 'j' || svar2 == 'J'){
cout << "Om du tar ut skriv med minustecken, ex -3. S\x84tta in, skriv vanligt.";
cin >> antal;
antal_1 += antal;
if (antal_1 < 0){
cout << "Det finns inte s\x84 m\x84nga p\x84 lagret.";
}
else{
break;
}
}
else{
break;

case '3':
cout << pris_5 << "kr. Kostar varan just nu. Skriv in det nya priset: ";
cin >> nypris;
pris_2 += nypris;
cout << nypris << "Kostar varan numera";
break;
default:
cout << "Felimatning";
}



cout << "Vill du s\x94ka efter nytt artikelnummer? (j/n): ";
cin >> svar;
}
}


else{
cout << "Artikelnummret existerar inte";
}
return 0;
}
}


Han klagar inte på nåt info_1 i 3:an längre iaf.

Men nu är det förutom det tidigare. Ändrade info_1 till att skriva som du föreslog men du klagade han på detta istället.

--------------------Configuration: varulager - Win32 Debug--------------------
Compiling...
varulager.cpp
D:\Jonas\dfhg\varulager.cpp(30) : error C2275: 'vara_1234_1' : illegal use of this type as an expression
d:\jonas\dfhg\vara_1.h(2) : see declaration of 'vara_1234_1'
D:\Jonas\dfhg\varulager.cpp(30) : error C2275: 'vara_1234_1' : illegal use of this type as an expression
d:\jonas\dfhg\vara_1.h(2) : see declaration of 'vara_1234_1'

D:\Jonas\dfhg\varulager.cpp(66) : error C2181: illegal else without matching if

Sen klagar han på else if 2, varför? Ser ut som det andra. 3:an, 4:an och 5:an allstå, som han inte klagar på.

Kreout
2005-01-12, 22:05
Kebab-Arne: Det är för mycket konstigheter för att jag ska hinna lista dem alla nu, men för det första måste du skapa instanser av klasserna, d.v.s skapa en variabel av t.ex TYPEN vara_1234_1, så här:

vara_1234_1 arne;
cout << arne.info_1;

INTE:

cout << vara_1234_1.info_1;

Det beror på att vara_1234_1 bara är en beskrivning av hur en instans av den klassen ser ut och fungerar, precis som du kan säga att en volvo S60 har det ena och det andra, och airbag och mugghållare osv, men du kan bara använda volvon om du har ett exemplar av den, det räcker inte med en ritning. Okej?

För det andra; du bör inte göra det här:

if (artnummer == 1234-1)

artnummer är en int, och 1234-1 är INTE detsamma som "1234-1" utan det blir räknat som ett heltal, och således blir det samma sak som 1234 minus 1, alltså 1233. Antingen får du göra om artnummer till en textsträng (av char), och jämföra med:

if (strcmp(artnummer, "1234-1") == 0) // utför det som ska hända om de är lika

eller så får låta användaren välja artikelnumret som ett heltal, t.ex:

if (artnummer == 12341)

För det tredje; du får inte ha flera else efter varandra utan if. Den korrekta strukturen är:

if {

}
else if {
}
else if {
}
......
......
else {
}

Du får alltså ha hur många else som helst om de är else if, men bara ett else utan if, och det är det som utförs om inga av de andra if-satserna ovanför stämmer med villkoren.

Sen tycker jag att du har lagt upp programmet på ett onödigt sätt. Som det är nu skulle du lika gärna kunna skriva in priserna etc i klartext i filen eftersom du ändå har källkod som är separat för alla olika typer av artiklar. Ett bättre sätt är att gör en universalklass (som den jag föreslog tidigare) och skapa en behållare för ett antal varor (här heter klassen "vara"):


vara mobelTyper[3] = {"Möbeltyp 1", 1, 65,
"Möbeltyp 2", 1, 142,
"Möbeltyp 3", 2, 22};

int choice = 0;

do
{
cout << "Välj möbeltyp (0 för att avsluta):" << endl
<< "1. " << mobelTyper[0].info << endl
<< "2. " << mobelTyper[1].info << endl
<< "3. " << mobelTyper[2].info << endl;
cin >> choice;

if (choice >= 1 && choice <= 3)
{
cout << "Möbeltypens data:" << endl
<< "Information: " << mobelTyper[choice - 1].info << endl
<< "Antal: " << mobelTyper[choice - 1].antal << endl
<< "Pris: " << mobelTyper[choice - 1].pris << endl
}
}
while (choice != 0);


Bara ett exempel... egentligen kan man göra bra mycket mer för att förenkla och strukturera så att det blir lättare att bygga ut programmet senare, men förstår du metodiken att man ska försöka bygga programmet så flexibelt som möjligt, och att man bör hitta smartare sätt att skriva koden på så att man slipper upprepa saker flera gånger. Men som tidigare sagts, skaffa en bra bok om C++ så kommer du att förstå det där på nolltid. Det gäller att komma in i tankesättet.