Anonymní profil jak – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil jak – Programujte.comAnonymní profil jak – Programujte.com

 

Příspěvky odeslané z IP adresy 84.21.126.–

jak
C / C++ › problem s prevodem typu(?) +…
25. 2. 2008   #67133

:( nadhera, jsem to zase zvoral... omlouvam se za doublepost. nechtel jsem

jak
C / C++ › problem s prevodem typu(?) +…
25. 2. 2008   #67124

Ahoj, podle Mistrovstvi v c++ delam ukol 10te lekce a pise mi to chybu (ja se v nich nevyznam vubec).. radsi ukazu konkretni kody..

chyba:

$ g++ ukol10_1func.cpp ukol10_1.h ukol10_1.cpp -o ukol10_1.o

ukol10_1func.cpp: In constructor ‘account::account(const char**, const char**, float)’:
ukol10_1func.cpp:10: error: cannot convert ‘const char**’ to ‘const char*’ for argument ‘2’ to ‘char* strncpy(char*, const char*, size_t)’
ukol10_1func.cpp:12: error: cannot convert ‘const char**’ to ‘const char*’ for argument ‘2’ to ‘char* strncpy(char*, const char*, size_t)’
ukol10_1.cpp: In function ‘int main()’:
ukol10_1.cpp:20: error: no matching function for call to ‘account::account(char [30], char [30])’
ukol10_1.h:13: note: candidates are: account::account(const char**, const char**, float)
ukol10_1.h:7: note: account::account(const account&)
ukol10_1.cpp:22: error: jump to case label
ukol10_1.cpp:20: error: crosses initialization of ‘account your_acc’
ukol10_1.cpp:28: error: jump to case label
ukol10_1.cpp:20: error: crosses initialization of ‘account your_acc’
ukol10_1.cpp:34: error: duplicate case value
ukol10_1.cpp:28: error: previously used here
ukol10_1.cpp:34: error: jump to case label
ukol10_1.cpp:20: error: crosses initialization of ‘account your_acc’
ukol10_1.cpp:37: error: jump to case label
ukol10_1.cpp:20: error: crosses initialization of ‘account your_acc’


soubory:
$ cat ukol10_1func.cpp 

//ukol10_1func.cpp -- spravuj si svuj account - funkce
//kompilator == ukol10_1.h ukol10_1.cpp ukol10_1func.cpp
#include<iostream>
#include"ukol10_1.h"
#include<cstring>

using namespace std;

account::account(const char* name[SLEN], const char* acc_num[SLEN], float remainder) {
strncpy(m_name, name, SLEN);
m_name[SLEN] = '\0';
strncpy(m_acc_num, acc_num, SLEN);
m_acc_num[SLEN] = '\0';
remainder = this->m_remainder;
}

void account::show_acc() const {
cout << "Jmeno: " << m_name << "\nCislo uctu: " << m_acc_num << "\nZustatek: " << m_remainder;
}

void account::deposit_cash(float cash) {
m_remainder += cash;
}

void account::withdraw_cash(float cash) {
m_remainder -= cash;
}


$ cat ukol10_1.h 

//ukol10_1.h -- spravujte si svuj account - hlavicka
//kompilator == ukol10_1.h ukol10_1.cpp ukol10_1func.cpp
#ifndef UKOL10_1_H
#define UKOL10_1_H

const int SLEN = 30;
class account {
private:
char m_name[SLEN];
char m_acc_num[SLEN];
float m_remainder;
public:
account(const char* name[SLEN]='\0', const char* acc_num[SLEN]='\0', float remainder=0.0);
void show_acc() const;
void deposit_cash(float cash);
void withdraw_cash(float cash);
};

#endif


$ cat ukol10_1.cpp 

//ukol10_1.cpp -- spravuj si svuj account - program
//kompilator == ukol10_1.cpp ukol10_1.h ukol10_1func.cpp
#include<iostream>
#include"ukol10_1.h"
using namespace std;

int main()
{
char option = 'a';
while (option != 'q') {
cout << "\nCo si prejete delat: \na)zadat udaje\nb)vlozit castku na ucet\nc)vybrat castku\nd)zobrazit udaje\nq)skoncit";
cin >> option;
switch (option) {
case 'a':
cout << "Zadejte sve jmeno: ";
char cname[SLEN], cacc_num[SLEN];
cin.get(cname, SLEN).get();
cout << "\nNyni cislo uctu: ";
cin.get(cacc_num, SLEN).get();
account your_acc(cname, cacc_num);
break;
case 'b':
cout << "Kolik chcete vlozit: ";
float cremainder;
cin >> cremainder;
your_acc.deposit_cash(cremainder);
break;
case 'c':
cout << "Kolik chcete vybrat: ";
float cwithdraw;
cin >> cwithdraw;
your_acc.withdraw_cash(cwithdraw);
break;
case 'd':
your_acc.show_acc();
break;
case 'q': break;
}
}
cout << "\nAhoj\n";
return 0;
}


tak.. je to asi hodne zmatene (jsem zacatecnik samouk, desne levej):(
neni to zadny dokonale promysleny program, hlavne by me zajimalo to - 'cannot convert ‘const char**’ to ‘const char*’
... tak abych nejak objasnil, normalne to vytvori pomoci tridy ucet, ktery se potom clenskejma funkcema spravuje. snazil jsem se s tim neco delat, mam to presne tak, jak mi to je logicky, i v ucebnici to je tak, ze v tride je deklarovana promenna char i; treba a pak kopiruje se do ni retezec z const char* .. a to je nejsrozumitelnejsi vysvetleni ke kterymu jsem prisel.
Bohuzel nemam nikoho na poradeni kolem sebe, tak vas prosim jestli byste mi nekdo nepomohl.
Moc bych byl vdecen, kdyztak kdyby bylo potreba jeste neco vedet, vsecko reknu hned.

jak
C / C++ › problem s prevodem typu(?) +…
25. 2. 2008   #67123

Ahoj, podle Mistrovstvi v c++ delam ukol 10te lekce a pise mi to chybu (ja se v nich nevyznam vubec).. radsi ukazu konkretni kody..

chyba:

$ g++ ukol10_1func.cpp ukol10_1.h ukol10_1.cpp -o ukol10_1.o

ukol10_1func.cpp: In constructor ‘account::account(const char**, const char**, float)’:
ukol10_1func.cpp:10: error: cannot convert ‘const char**’ to ‘const char*’ for argument ‘2’ to ‘char* strncpy(char*, const char*, size_t)’
ukol10_1func.cpp:12: error: cannot convert ‘const char**’ to ‘const char*’ for argument ‘2’ to ‘char* strncpy(char*, const char*, size_t)’
ukol10_1.cpp: In function ‘int main()’:
ukol10_1.cpp:20: error: no matching function for call to ‘account::account(char [30], char [30])’
ukol10_1.h:13: note: candidates are: account::account(const char**, const char**, float)
ukol10_1.h:7: note: account::account(const account&)
ukol10_1.cpp:22: error: jump to case label
ukol10_1.cpp:20: error: crosses initialization of ‘account your_acc’
ukol10_1.cpp:28: error: jump to case label
ukol10_1.cpp:20: error: crosses initialization of ‘account your_acc’
ukol10_1.cpp:34: error: duplicate case value
ukol10_1.cpp:28: error: previously used here
ukol10_1.cpp:34: error: jump to case label
ukol10_1.cpp:20: error: crosses initialization of ‘account your_acc’
ukol10_1.cpp:37: error: jump to case label
ukol10_1.cpp:20: error: crosses initialization of ‘account your_acc’


soubory:
$ cat ukol10_1func.cpp 

//ukol10_1func.cpp -- spravuj si svuj account - funkce
//kompilator == ukol10_1.h ukol10_1.cpp ukol10_1func.cpp
#include<iostream>
#include"ukol10_1.h"
#include<cstring>

using namespace std;

account::account(const char* name[SLEN], const char* acc_num[SLEN], float remainder) {
strncpy(m_name, name, SLEN);
m_name[SLEN] = '\0';
strncpy(m_acc_num, acc_num, SLEN);
m_acc_num[SLEN] = '\0';
remainder = this->m_remainder;
}

void account::show_acc() const {
cout << "Jmeno: " << m_name << "\nCislo uctu: " << m_acc_num << "\nZustatek: " << m_remainder;
}

void account::deposit_cash(float cash) {
m_remainder += cash;
}

void account::withdraw_cash(float cash) {
m_remainder -= cash;
}


$ cat ukol10_1.h 

//ukol10_1.h -- spravujte si svuj account - hlavicka
//kompilator == ukol10_1.h ukol10_1.cpp ukol10_1func.cpp
#ifndef UKOL10_1_H
#define UKOL10_1_H

const int SLEN = 30;
class account {
private:
char m_name[SLEN];
char m_acc_num[SLEN];
float m_remainder;
public:
account(const char* name[SLEN]='\0', const char* acc_num[SLEN]='\0', float remainder=0.0);
void show_acc() const;
void deposit_cash(float cash);
void withdraw_cash(float cash);
};

#endif


$ cat ukol10_1.cpp 

//ukol10_1.cpp -- spravuj si svuj account - program
//kompilator == ukol10_1.cpp ukol10_1.h ukol10_1func.cpp
#include<iostream>
#include"ukol10_1.h"
using namespace std;

int main()
{
char option = 'a';
while (option != 'q') {
cout << "\nCo si prejete delat: \na)zadat udaje\nb)vlozit castku na ucet\nc)vybrat castku\nd)zobrazit udaje\nq)skoncit";
cin >> option;
switch (option) {
case 'a':
cout << "Zadejte sve jmeno: ";
char cname[SLEN], cacc_num[SLEN];
cin.get(cname, SLEN).get();
cout << "\nNyni cislo uctu: ";
cin.get(cacc_num, SLEN).get();
account your_acc(cname, cacc_num);
break;
case 'b':
cout << "Kolik chcete vlozit: ";
float cremainder;
cin >> cremainder;
your_acc.deposit_cash(cremainder);
break;
case 'c':
cout << "Kolik chcete vybrat: ";
float cwithdraw;
cin >> cwithdraw;
your_acc.withdraw_cash(cwithdraw);
break;
case 'd':
your_acc.show_acc();
break;
case 'q': break;
}
}
cout << "\nAhoj\n";
return 0;
}


tak.. je to asi hodne zmatene (jsem zacatecnik samouk, desne levej):(
neni to zadny dokonale promysleny program, hlavne by me zajimalo to - 'cannot convert ‘const char**’ to ‘const char*’
... tak abych nejak objasnil, normalne to vytvori pomoci tridy ucet, ktery se potom clenskejma funkcema spravuje. snazil jsem se s tim neco delat, mam to presne tak, jak mi to je logicky, i v ucebnici to je tak, ze v tride je deklarovana promenna char i; treba a pak kopiruje se do ni retezec z const char* .. a to je nejsrozumitelnejsi vysvetleni ke kterymu jsem prisel.
Bohuzel nemam nikoho na poradeni kolem sebe, tak vas prosim jestli byste mi nekdo nepomohl.
Moc bych byl vdecen, kdyztak kdyby bylo potreba jeste neco vedet, vsecko reknu hned.

newbie
C / C++ › cin.get(voiture[i]-&gt;marqu…
1. 12. 2007   #56919

To Jonyzz : jo takhle..moc dik

newbie
C / C++ › cin.get(voiture[i]-&gt;marqu…
1. 12. 2007   #56900

To Jonyzz : aha, jj dekuju... tak jsem opravil '->' na '.' ale jelo to jako by tam zadny 'cin' nebyly (nic to po uzivatelovi nechtelo zadat)..ale po pridani do cyklusu za kazdej 'cin' cin.get() prazdnyho to slo.. ikdyz teda nevim proc, jsem myslel, ze znak novyho radku zanechava jen cin.get(xx, 20) ...

promin, ze jeste otravuju, ale muzu se zeptat, takze

car* voiture = new car[20]
nevytvorim pole ukazatelu na char ? jak teda ?

newbie
C / C++ › cin.get(voiture[i]-&gt;marqu…
1. 12. 2007   #56876

NE, JA JSEM VUL SORRY ...fakt moc

car* voiture[count];

nahradte pls
car* voiture = new car[count];


ale pak mi to teda pise tu chybku
ukol5_6.cpp: In function 'int main()':

ukol5_6.cpp:19: error: base operand of '->' has non-pointer type 'car'
ukol5_6.cpp:21: error: base operand of '->' has non-pointer type 'car'
ukol5_6.cpp:25: error: base operand of '->' has non-pointer type 'car'
ukol5_6.cpp:25: error: base operand of '->' has non-pointer type 'car'


cim to je ? co mam teda zmenit? moc se omlouvam za svou blbost...

newbie
C / C++ › cin.get(voiture[i]-&gt;marqu…
1. 12. 2007   #56875

Tak delam jednoduchy programek uplne.. zepta se vas kolik chcete zadat aut, pak postupne na rok vyroby a znacku vsech z nich a pak je ma vypsat.. a nefunguje mi to..g++ hlasilo nejakou podivnou hlasku prave ohledne

cin.get(voiture[i]->marque, ARSIZE);

ta zmizla, kdyz jsem

->

zmenil na

.

..ale kdyz to clovek spustil, preskakovalo vsecky otazky, jen je to vypsalo a konec... a tak jsem s tim ruzne zkousel carovat, a nakonec jsem dosel jednodusse k tomu, ze g++ prestalo psat chybku kdyz jsem to vratil do puvodni podoby..coz teda nejak nechapu.. uz se mi to driv stalo, ze se chovalo takhle divne, akoratze predtim (kdyz toto g++ udelalo) to slo, ted to jednodusse za chodu programu napise Segmentation fault.. kazdopadne vzhledem k tomu, ze v tech ukazatelich nejsem vubec zbehly, tak si myslim, ze to bude nejaka jednoducha chyba syntaxe proste..takze prosim, jestli byste se na to nemohli kouknout..snad jsem nic nezapomnel vypsat nebo tak..kdyztak cokoli..

#include<iostream>

const int ARSIZE = 20;

struct car {
char marque[ARSIZE];
int made;
};

int main()
{ using namespace std;
cout << "Kolik autaku chces vlozit do katalogu: ";
int count;
cin >> count;
car* voiture[count];
int i;
for (i=0; i< count; i++)
{ cout << "Auto c. " << i+1 << ": ";
cout << "\nJakou znacku ma " << i+1 << ". auto: ";
cin.get(voiture[i]->marque, ARSIZE);
cout << "\nKdy bylo vyrobeno " << i+1 << " auto: ";
cin >> voiture[i]->made;
}
cout << "Zde je vase sbirka: \n";
for (i=0; i< count; i++)
cout << voiture[i]->made << " " << voiture[i]->marque << endl;
return 0;
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý