Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: webhope 19. 11. 2013, 22:47:54

Název: Chyba v kódu C++
Přispěvatel: webhope 19. 11. 2013, 22:47:54
Můžete mi poradit, kde mám chybu?

#include <iostream>
http://paste.ofcode.org/33JicnqDi38ErmMEUsbGGfd

Dostávám nějak moc chyb:
s:\temp\c++\operátory a datové proudy\01 (2) přetížení operátorů\01 (2) přetížení operátorů\01 (2) přetížení operátorů.cpp(18): error C2061: syntax error : identifier 'myClass'
s:\temp\c++\operátory a datové proudy\01 (2) přetížení operátorů\01 (2) přetížení operátorů\01 (2) přetížení operátorů.cpp(19): error C2805: binary 'operator >>' has too few parameters
s:\temp\c++\operátory a datové proudy\01 (2) přetížení operátorů\01 (2) přetížení operátorů\01 (2) přetížení operátorů.cpp(22): error C2065: 'objekt' : undeclared identifier
s:\temp\c++\operátory a datové proudy\01 (2) přetížení operátorů\01 (2) přetížení operátorů\01 (2) přetížení operátorů.cpp(22): error C2228: left of '.getA' must have class/struct/union
          type is ''unknown-type''
s:\temp\c++\operátory a datové proudy\01 (2) přetížení operátorů\01 (2) přetížení operátorů\01 (2) přetížení operátorů.cpp(24): error C2065: 'objekt' : undeclared identifier
s:\temp\c++\operátory a datové proudy\01 (2) přetížení operátorů\01 (2) přetížení operátorů\01 (2) přetížení operátorů.cpp(24): error C2228: left of '.getB' must have class/struct/union

A je to podle tohoto článku:
http://www.builder.cz/rubriky/c/c--/pretezovani-operatoru-lt-lt-a-gt-gt-pro-datove-proudy-v-c--155741cz?diskuse
Název: Re:Chyba v kódu C++
Přispěvatel: OleEinar 19. 11. 2013, 23:02:16
pre zaciatok myClass m; -----> MyClass m;
Název: Re:Chyba v kódu C++
Přispěvatel: kozec 19. 11. 2013, 23:08:53
V tomto pripade bude najvacsou chybou pouzitie msvc :P GCC slusne upozorni, ze je myClass nedeklarovane.

Inak este volas MyClass.getA(cislo) s parametrom, zatial co deklaracia ziaden parameter necaka a tvoje "Krátké, že?" je sice kratke, ale nepripustne, ak A a B deklarujes privatne. getA() a getB() bude fungovat.
Název: Re:Chyba v kódu C++
Přispěvatel: ondra.holub 19. 11. 2013, 23:12:37
Nejdříve je potřeba si ujasnit, jestli chceš, aby se tvá třída jmenovala myClass, nebo MyClass a pak všude používat jenom jedno označení.

V operatoru >> se volají metody objekt.getA(cislo), ale tam asi chceš setA(cislo).

V operatoru << musíš mezi čísla strčit nějaký bílý znak, jinak se ti ta dvě čísla spojí a nepůjdou načíst jako dvě hodnoty.

A pak už zbývá jenom doplnit nenadefinované metody.
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 19. 11. 2013, 23:20:54
Dík za rady, ano udělal jsem několik chyb během přepisu

Jaké metody, že tam nejsou nadefinované?
Teď nerozumím proč nejsou zpřístupnit soukromí členové.
Zatím ani nerozumím tomu co by to mělo (potřebuju to nejdříve rozjet, abych si to odkrokoval).

http://paste.ofcode.org/cHRADAPFjW8irsQFTB4kTm

s:\temp\c++\operátory a datové proudy\01 (2) přetížení operátorů\01 (2) přetížení operátorů\01 (2) přetížení operátorů.cpp(30): error C2248: 'MyClass::A' : cannot access private member declared in class 'MyClass'
          s:\temp\c++\operátory a datové proudy\01 (2) přetížení operátorů\01 (2) přetížení operátorů\01 (2) přetížení operátorů.cpp(10) : see declaration of 'MyClass::A'
          s:\temp\c++\operátory a datové proudy\01 (2) přetížení operátorů\01 (2) přetížení operátorů\01 (2) přetížení operátorů.cpp(8) : see declaration of 'MyClass'
s:\temp\c++\operátory a datové proudy\01 (2) přetížení operátorů\01 (2) přetížení operátorů\01 (2) přetížení operátorů.cpp(30): error C2248: 'MyClass::B' : cannot access private member declared in class 'MyClass'
          s:\temp\c++\operátory a datové proudy\01 (2) přetížení operátorů\01 (2) přetížení operátorů\01 (2) přetížení operátorů.cpp(10) : see declaration of 'MyClass::B'
          s:\temp\c++\operátory a datové proudy\01 (2) přetížení operátorů\01 (2) přetížení operátorů\01 (2) přetížení operátorů.cpp(8) : see declaration of 'MyClass'
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
Název: Re:Chyba v kódu C++
Přispěvatel: ondra.holub 19. 11. 2013, 23:30:53
Operátor máš definovaný jako globální funkci. Není to metoda třídy MyClass, takže nemůže přistupovat k jejím prvkům, které jsou private. Ale klidně může zavolat její public metody, tedy getA() a getB()
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 19. 11. 2013, 23:38:30
Takže chyba je tady:

Kód: [Vybrat]
ostream& operator << (ostream &os, MyClass &objekt)
{
   return (os << objekt.A << objekt.B); // Krátké, že?
}

Pokud k přístupu k soukromým proměným A a B. To bych chápal, kdyby operátor nebyl přetypovaný.
Ale měl bych ho mít přetypovaný. Jak si psal že mám dát mezery mezi čísla, jak si to myslel?
Já mám
operator >> (...)
Mezery jsem dal z obou stran.
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 19. 11. 2013, 23:51:05
Tak jsem to rozluštil (rozjel). http://paste.ofcode.org/36XAbMsFeHsSsyB9EtZshKM
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 08:42:27
Ještě ke kódu. Zajímalo by mě, jak to, že cout tiskne adresu místo text, který jsem zadal.
Tohle nemohu pochopit. Dále by mě ještě zajímalo jak se anglicky řekne přetížení operátorů nebo přetížit operátor.
Název: Re:Chyba v kódu C++
Přispěvatel: vbl 20. 11. 2013, 08:52:39
Přetížení operátoru = operator overload.
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 09:03:42
Ještě jedna věc. Teď zkouším tu třídu přesunout do samostatného hlavičkového souboru a dostávám chybu:

Stdafx.h obsahuje
#include<fstream>
#include <iostream>
#include <conio.h>

Kód: [Vybrat]
#include "stdafx.h"
class MyClass
{
private:
      int A,B;
   public:
  int getA() { return A; }
      int getB() { return B; }
      void setA(int a) { A = a; }
      void setB(int b) {B = b; }
  friend ostream& operator << (ostream &os, MyClass &objekt);  
};

Chyba je v podstatě na řádku kde se objevuje slovo friend.

s:\temp\c++\operátory a datové proudy\02 ofstream_read_file\02 ofstream_read_file\myclass.h(12): error C2143: syntax error : missing ';' before '&'


Jde mi o to, že další článek navazuje a používá se tam opět třída MyClass, takže jsem to chtěl dát do samostatného souboru aby to bylo přehlednější.
Název: Re:Chyba v kódu C++
Přispěvatel: gamer 20. 11. 2013, 09:23:27
S clangem by se ti začínalo líp, generuje rozumnější chybové hlášky:
Kód: [Vybrat]
clang++ main.cc
main.cc:13:14: error: unknown type name 'ostream'
      friend ostream& operator << (ostream &os, MyClass &objekt);     
             ^
Jinak std::ostream
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 09:27:56
gamer:
ale já v hlavičkovém souboru #include "stdafx.h" includuju
#include <iostream>
mohu tento příkaz vložit přímo do kódu a nic to nepomůže.
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 09:33:07
Ale fakt to vypadá jako by tam ta třída ostream nebyla načtená:

...
Kód: [Vybrat]
private
ostream hello;
...
...\myclass.h(7): error C2146: syntax error : missing ';' before identifier 'hello'

Používám Visual Studio Express. Ano, hlášky jsou nepřesné.
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 09:35:29
Znáš nějaký spolehlivý zdroj odkud stáhnout ten clang pro win32? Nechci si zavirovat počítač.
Název: Re:Chyba v kódu C++
Přispěvatel: hu 20. 11. 2013, 09:40:53
gamer:
ale já v hlavičkovém souboru #include "stdafx.h" includuju
#include <iostream>
mohu tento příkaz vložit přímo do kódu a nic to nepomůže.

Ale trida ostream je definovana v namespace std, takze bud pouzij direktivu use namespace std;,  nebo rozlisuj operatorem :: (tedy std::ostream)
Název: Re:Chyba v kódu C++
Přispěvatel: hu 20. 11. 2013, 09:41:48
gamer:
ale já v hlavičkovém souboru #include "stdafx.h" includuju
#include <iostream>
mohu tento příkaz vložit přímo do kódu a nic to nepomůže.

Ale trida ostream je definovana v namespace std, takze bud pouzij direktivu use namespace std;,  nebo rozlisuj operatorem :: (tedy std::ostream)
Pardon, samozrejme "using namespace std;"
Název: Re:Chyba v kódu C++
Přispěvatel: gamer 20. 11. 2013, 09:44:09
hu: using namespace std není dobré používat a už vůbec ne v hlavičkovém souboru.
webhope: proč se vázat na windows, nainstaluj linux do virtuálu a hotovo.
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 10:39:11
Ok.
Kód: [Vybrat]
using namespace std;jsem použil ale na nesprávném místě. Kód mám převzatý z článku na builder.cz ale tohle tam napsané neměli.
Normálně používám třídu std, ale oni ji tam napsanou nemají, což je taky pěkně matoucí. No nic, odstranil jsem většinu chyb, ale
po includování hlavičky se třídou MyClass dostávám hlášku že MyClass m; nemá definovaný defaultní konstruktor.
Když ale spouštím tu věc v té podobě co jsem posílal včera v noci, tedy bez oddělení třídy do hlavičkového souboru, tak to žádnou chybu nepsalo.
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 10:39:56
gamer, linux? Fuj!
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 10:54:18
gamer: díky za dobrou radu. Už to "skoro" jede. Teď jde o to, že rozjíždím jiný kód který je založený na té předchozí třídě. Tak zas
musím pochopit co se ode mě chce.

Kód: [Vybrat]
int main(void)
{
   MyClass m;
   cout << "Cekam objekt" << endl;
   cin >> m;
   if (!cin)
   {
     cerr << "Objekt nenacten! " << endl;
   }
   else
   {
     ofstream f("data.txt");
     if (!f)
     {
       cerr << "Nelze otevrit data.txt" << endl;
       return -1;
     }
     f << "Objekt byl:" << endl << m;
     cout << "Objekt byl:" << endl << m;
   }
   getch();
   return 0;
}

Zkompilováno bez chyby, ale mám hlášku v konzole že objekt nebyl nalezen. Ale vytvořil jsem soubory data.txt i s textem uvnitř.
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 10:57:16
Tedy pardon, píše to, Objekt nenacten!.

Asi nemůže najít cestu k souboru nebo co. Jak zjistit jakou cestu se snaží otevřít? Neměl bych tam zadat celou cestu k souboru? Asi jo, ne?
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 11:02:57
Já totiž nevím jaký objekt se ode mě očekává. Očividně se nejedná o pokus načíst soubor, takže cestu bych zadávat neměl. Očekával bych že jakýkoliv řetězec zadám, tak bude uložen to objektu m.
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 11:55:59
Možná mi něco uniklo že jsem nepochopil co v tom článku po mě chtějí, co tam mám zadat.
http://www.builder.cz/rubriky/c/c--/pretezovani-operatoru-lt-lt-a-gt-gt-pro-datove-proudy-v-c--155741cz
Píše jen: "Opět změníme funkci main v předchozím příkladu:"
Dále už žádné další vysvětlení  :(

Můj kód je rozdělen na hlavičkový soubor:
Kód: [Vybrat]
#include "stdafx.h"

class MyClass
{
private:
      int A,B;
   public:
  int getA() { return A; }
      int getB() { return B; }
      void setA(int a) { A = a; }
      void setB(int b) {B = b; }
  friend std::ostream& operator << (std::ostream &os, MyClass &objekt);
  friend std::istream& operator >> (std::istream &is, MyClass &objekt);
};

std::istream& operator >> (std::istream &is, MyClass &objekt)
{
   int cislo;
   is >> cislo; // Využiji již přetížených operátorů pro primitivní datové typy
   objekt.setA(cislo);
   is >> cislo;
   objekt.setB(cislo);
   return is; // Nezapomeňte na tuto drobnost! Jinak nebudete moc dávat operátory za sebe
}

std::ostream& operator << (std::ostream &os, MyClass &objekt)
{
   return (os << objekt.A << objekt.B); // Krátké, že?
}

a soubor cpp:
Kód: [Vybrat]
#include "stdafx.h"
#include "MyClass.h"

using namespace std; // using istream and ostream

int main(void)
{
   MyClass m;
   cout << "Cekam objekt" << endl; 
   cin >> m;
   if (!cin)
   {
     cerr << "Objekt nenacten! " << endl;
   }
   else
   {
     ofstream f("data.txt");
     if (!f)
     {
       cerr << "Nelze otevrit data.txt" << endl;
       return -1;
     }
     f << "Objekt byl:" << endl << m;
     cout << "Objekt byl:" << endl << m;
   }
   getch();
   return 0;
}

Tážu se tedy, chápete někdo co po mě chtějí?

Za druhé, pomohli byste to upravit tak, abych mohl funkci
Kód: [Vybrat]
friend std::istream& operator >> (std::istream &is, MyClass &objekt);využívat podobně jako
Kód: [Vybrat]
friend std::ostream& operator << (std::ostream &os, MyClass &objekt); tedy abych mohl nejdříve zadat název souboru, poté nějaké data, pak se to uloží a dále se to načte a vypíše co jsem tam napsal.
V prvním příkladu se řešil jen výstup pomocí jednoho řádku:
Kód: [Vybrat]
cout << "Adresa objektu je:" << endl << m;pro který existovala třída
Kód: [Vybrat]
ostream& operator << (ostream &os, MyClass &objekt)
{ friend ostream& operator << (ostream &os, MyClass &objekt); }
Chtěl bych tedy vyzkoušet toto elegantní řešení i pro vstup. Vešlo by se to na jeden řádek,
když bych chtěl zadat nejdříve jméno souboru, a po potvrzení ještě zadat data pro vstup?
Případně naopak, nejdříve zadat data pro soubor, a pak ho pojmenovat?
Myslím, ale že by to na jeden řádek nešlo, protože by to vlastně byly dvě různé funkce.
Tak nejdříve zadat to jméno a pak to pomoci přetypovaného operátoru uložit do souboru?
Název: Re:Chyba v kódu C++
Přispěvatel: Bob 20. 11. 2013, 12:35:34
gamer, linux? Fuj!

Myslim, ze jsi si timto vyrokem na serveru o linuxu sam uzavrel toto vlakno :-)
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 12:41:15
Vážně? Že by tu byli tak silní pokrytci? Nemám nic proti linuxu, ale snad mohu říct svůj názor! Linux je dobrý, sám ho používám, ale ne na běžnou práci a programování! A jestliže používám Windows, tak ať mi nikdo nepodstrkuje linux, protože vím jak dlouho v něm všechno trvá a jak dlouho trvá se tyhle věci učit. Já už si vybral. Jestli mě kvůli tomu někdo odsuzuje, tak jeho problém. Jestli se někdo urazí kvůli tomu, že jsem vyjádřil svůj názor! Tohle vlákno nemá nic společného s linuxem, je to programování pod Windows!
Název: Re:Chyba v kódu C++
Přispěvatel: nohope nohope 20. 11. 2013, 13:10:12
Proč se zabýváš přetěžováním operátorů a třídami, když ti evidentně chybí základy. Takhle ten kapitalismus nevybuduješ. Nejdřív se nauč pořádně základy a pak se teprve posuň k pokročilým tématům.
Název: Re:Chyba v kódu C++
Přispěvatel: 死神 20. 11. 2013, 13:13:51
Tohle vlákno nemá nic společného s linuxem, je to programování pod Windows!

Nevidím tam žádný windows kód, tak nepřeháněj. A jak psal nohope, zkus to od začátku, nejdřív úplné základy, které ti evidentně chybí.
Název: Re:Chyba v kódu C++
Přispěvatel: jholas 20. 11. 2013, 13:21:23
Tohle vlákno nemá nic společného s linuxem, je to programování pod Windows!

Nevidím tam žádný windows kód, tak nepřeháněj. ...

 ;D ach jo, už toho radši nechte došly mi ubrousky na monitor
Název: Re:Chyba v kódu C++
Přispěvatel: Sten 20. 11. 2013, 13:30:51
Možná mi něco uniklo že jsem nepochopil co v tom článku po mě chtějí, co tam mám zadat.
http://www.builder.cz/rubriky/c/c--/pretezovani-operatoru-lt-lt-a-gt-gt-pro-datove-proudy-v-c--155741cz
Píše jen: "Opět změníme funkci main v předchozím příkladu:"
Dále už žádné další vysvětlení  :(

To vysvětlení je před tou větou (ofstream je děděný z ostream, a tak bude operátor << pro ten objekt fungovat úplně stejně pro ofstream jako funguje pro cout) a za tou větou je rovnou ta změněná funkce main uvedena.

Za druhé, pomohli byste to upravit tak, abych mohl funkci
Kód: [Vybrat]
friend std::istream& operator >> (std::istream &is, MyClass &objekt);využívat podobně jako
Kód: [Vybrat]
friend std::ostream& operator << (std::ostream &os, MyClass &objekt); tedy abych mohl nejdříve zadat název souboru, poté nějaké data, pak se to uloží a dále se to načte a vypíše co jsem tam napsal.
V prvním příkladu se řešil jen výstup pomocí jednoho řádku:
Kód: [Vybrat]
cout << "Adresa objektu je:" << endl << m;pro který existovala třída
Kód: [Vybrat]
ostream& operator << (ostream &os, MyClass &objekt)
{ friend ostream& operator << (ostream &os, MyClass &objekt); }
Chtěl bych tedy vyzkoušet toto elegantní řešení i pro vstup. Vešlo by se to na jeden řádek,
když bych chtěl zadat nejdříve jméno souboru, a po potvrzení ještě zadat data pro vstup?
Případně naopak, nejdříve zadat data pro soubor, a pak ho pojmenovat?
Myslím, ale že by to na jeden řádek nešlo, protože by to vlastně byly dvě různé funkce.
Tak nejdříve zadat to jméno a pak to pomoci přetypovaného operátoru uložit do souboru?

Moc ten dotaz nechápu, ale zkusím odpovědět: Žádné jméno souboru se tam nezadává, ten operátor pouze dostane nějaký výstupní proud, do kterého může zapisovat. Neví, co to je za proud, a ani to vědět nepotřebuje. On to nemusí být soubor, může to být cout, ostringstream, sítový socket, sdílená paměť nebo třeba kompresní filtr či jen černá díra.
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 13:35:13
Nevím podle čeho usuzujete že mi chybí základy. Odkud je podle vás mám z internetu čerpat? Učit C++ jsem se začal před 10 týdny, začal jsem na cplpluplus tutoriálech a to jsem četl dvakrát, plus, jsem zkoušel kódy. Pak jsem jel na builderu gui 20 článků a s těmi jsem neměl problém. Pak jsem jel tu sekci článků co je tady, teorii nejdříve asi 17 článků, teď zkouším ty kódy. Nevzal jsem ty kódy k otestování úplně popořadě, ale to nic nemění na tom, že autor některé věci vynechal, jako že v kódech nepoužívá using namespace std; atd. a čtenář musí na zbytek přijít sám - což podstatně začátečnikovi ztíží chápání kódu. Řekne si proč to nejede. Třeba to očekávání vstupu, ale není vysvětleno jaký druh vstupu vlastně mám zadat. Tak jak mám vědět co mám řešit, když nevím co ode mě autor článku chce.
To že ty hlásky ve Visual Studiu jsou nepřehledné taky není moje chyba, takže se příčiny chyb hůře zjišťují. Prostě se učím za chodu.
Název: Re:Chyba v kódu C++
Přispěvatel: eMko 20. 11. 2013, 13:40:07
Minimálně já jsem Ti dvakrát psal, z čeho čerpat.

A ano, chybí Ti základy.

Hlášky z C++ kompilátoru možná nejsou z nejpřehlednějších, ale kdybys je četl a znal základy, na většinu chyb bys přišel.
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 13:49:57
Sten:
Píše mi to Objekt nenacten takže mluvím o tomto:
Kód: [Vybrat]
cin >> m;ne o tomto:
Kód: [Vybrat]
ofstream f("data.txt");tam jsem se ještě nedostal.

eMko:
Ty si mě psal kde? Sis mě asi s někým spletl!
Jestli myslíš tyhle základy tak zrovna to jsem nečetl,
http://www.builder.cz/rubriky/c/c--/zaklady-oop-v-c-od-c-k-c--155657cz
ale četl jsem na cplusplus. Letem světem, ten článek neobsahuje nic nového co bych na cplusplus nečetl a taky tam nevidím nic o těch hlavičkových souborech a namespacech. Povšimni si že namespacy "Prostory jmen v C++" jsou až v 18 článku někde za paměťovými proudy!
Název: Re:Chyba v kódu C++
Přispěvatel: jholas 20. 11. 2013, 14:35:53
Ty nás tady asi všechny taháš za fusekli, ne? ;-)
A jestli ne, tak na ty základy doporučuju spíš nějakou literaturu (např. http://www.amazon.com/Complete-Idiots-Guide-Paul-Snaith/dp/0789718162, příp. http://www.amazon.com/For-Dummies-Stephen-R-Davis/dp/0470317264/ref=pd_sim_sbs_b_2) než seriál na builder.cz notabene když je to ještě článek o C++ pro někoho kdo zná C, takže se spousta věcí se tak nějak předpokládá.

jinak stručně k tomu kódu:
1. vykašli se na friend členy třídy - zbytečně to začátečníka mate. A tohle není případ, kde by to bylo potřeba.
místo toho u operátoru výstupu použij public členy.
Kód: [Vybrat]
std::ostream& operator << (std::ostream &os, MyClass &objekt)
{
   return (os << objekt.getA() << ", " << objekt.getB()); //tam je ten whitespace (i s čárkou), abys poznal co to sype ven (taky už to někdo radil)
}

2. C/C++ má tak trochu úchylku co se typů týče. Prostě to není PHP a string do integeru nedostaneš ani omylem (že by reinterpret_cast? ;-) )
Takže pokud se snažíš na vstup cin >> m zadávat cestu k souboru (jak kdesi popisuješ), tak na základě definovaného výstupního proudu moc nepochodíš, když tam čekáš 2x integer. A to je ten důvod proč ti to píše "Objekt nenacten".

3. Pokud se nenaučíš aspoň trochu (trochu víc) zvládat C/C++ tak na WinAPI tak nějak radši zapomeň a zkus např C# a WinForms

Jinak by mě, čistě ze zvědavosti zajímaly, proč takové ambice naučit se C++. Jestli by nebylo lepší zkusit něco jiného
Název: Re:Chyba v kódu C++
Přispěvatel: eMko 20. 11. 2013, 14:57:08
Ty si mě psal kde? Sis mě asi s někým spletl!

Za posledních pár týdnů jsi tu založil minimálně dva thready týkající se programování v C++ (možná jich bylo víc - fórum na rootu nečtu nějak podrobně). Tam jsem Ti psal. A ne, nesplet jsem si Tě - Tebe si nelze s nikým splést. Upřímně, potkat Tě na přijímacím pohovoru tady ve firmě, tak letíš - a ne dveřmi, ale oknem, upozorňuji, že je to 13 pater.

Chápu, že se učíš - každý někdy začínal. Ale Ty prostě neposloucháš dobře míněné rady od nikoho. Kdyby jen ode mě, tak je mi to celkem jedno - nejsem mistr světa (nepočítáme-li brnkání na nervy) a mám na mnohé věci odlišný názor od ostatních tady na fóru. Ale s Tvým přístupem se programovat nenaučíš nikdy.
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 15:07:56
jholas:
Vřelé díky za odpověď. Ambice. Já nemám ambice. Pro něco se rozhodnu a jdu za tím. Už jsem začal, takže to dokončím.
Builder mi právě přišel dobrý v tom, že je česky a tudíž to pro mě v mnohém bylo snadnější. Spousta ukázkových kódů, to je velká výhoda.
Takže jsem to bral jako příležitost vyzkoušet si to o čem se píše na cplusplus.
No dobrá tedy, a když zadávám to číslo (tedy ještě než vyzkouším to co si napsal), zmáčknu párkrát enter a nic. No a když bych dal číslo  ctr+z jako na ukončení vstupu tak to taky vrátí chybný výsledek, takže objekt nenalezen.

Emko,
tak zrovna tebe si už pamatovat budu, protože takové lidi jako ty moc nemusím. Nesnáším totiž, když mi někdo říká co mám dělat a kor, když mě odrazuje od mých osobních předsevzetí a říká že nic nedokážu. Takových lidí jako ty jsem už potkal hodně co mi říkali že nic nedokážu, a zvysoka na tebe ... víš co. Mám tě někde. Ale chci být slušný. Takže když tě to tak moc obtěžuje rač na moje vlákna nereagovat!
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 15:27:37
Jinak jsem prošel asi 4 vlákna co jsem tu založil a žádné linky od Emka jsem tam nenašel. Jestli to tu někomu vadí, že zakládám vlákna, tak mi to račte říct, protože na každém foru jsou jiné zvyklosti. Někde to chtějí mít všechno v jednom vláknu a jinde zas pro každou otázku nové vlákno. A jestli tu někomu brnkám na nervy, tak mě prosím nečtěte! Děkuji!
Název: Re:Chyba v kódu C++
Přispěvatel: eMko 20. 11. 2013, 15:44:49
Sice jsem Ti nedal přímé odkazy jak někteří tady, ale i tak bys měl mít dost informací.

Good luck!
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 15:58:24
Ok, jenže to učení to není tak, že když si něco přečtu, že si to hned vše zapamatuju. Učení je proces, který se skládá ze střídání teorie a praxe a opakování.
Název: Re:Chyba v kódu C++
Přispěvatel: eMko 20. 11. 2013, 17:07:12
Samozřejmě, programovat se zatím nikdo nenaučil pouhým přečtením knížky. Ale bereš si toho na sebe evidentně moc - C++ je jeden z nejkomplexnějších jazyků, který se v současné době masivně používá a Ty jdeš do toho rovnou po hlavě - to je jak kdybys hrál Doom II rovnou na obtížnost "Nightmare". "I'm too young to die" je jednodušší ;-)
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 17:22:29
Jasně, ale učit se psát abstraktní třídy a šablony je zajímavější než učit se psát cout << "Hello world!" :-)
Název: Re:Chyba v kódu C++
Přispěvatel: eMko 20. 11. 2013, 17:35:42
To samozřejmě ano :-) . Bohužel těmi základy je nutno se prokousat.
Název: Re:Chyba v kódu C++
Přispěvatel: j 20. 11. 2013, 17:53:55
Nevím podle čeho usuzujete že mi chybí základy. Odkud je podle vás mám z internetu čerpat? Učit C++ jsem se začal před 10 týdny, začal jsem na cplpluplus tutoriálech a to jsem četl dvakrát, plus, jsem zkoušel kódy. Pak jsem jel na builderu gui 20 článků a s těmi jsem neměl problém. Pak jsem jel tu sekci článků co je tady, teorii nejdříve asi 17 článků, teď zkouším ty kódy. Nevzal jsem ty kódy k otestování úplně popořadě, ale to nic nemění na tom, že autor některé věci vynechal, jako že v kódech nepoužívá using namespace std; atd. a čtenář musí na zbytek přijít sám - což podstatně začátečnikovi ztíží chápání kódu. Řekne si proč to nejede. Třeba to očekávání vstupu, ale není vysvětleno jaký druh vstupu vlastně mám zadat. Tak jak mám vědět co mám řešit, když nevím co ode mě autor článku chce.
To že ty hlásky ve Visual Studiu jsou nepřehledné taky není moje chyba, takže se příčiny chyb hůře zjišťují. Prostě se učím za chodu.

heh ... ehm ... mno .. vis, trebas to s tim std je snad v prvni kapitole kazdyho tutorialu.
A pokud dobre vidim, tak ac neprogramator, nevim nic o tom, ze by se do hacek davala implementace. Tam patri pouze deklarace.

Takze zcela zjevne neznas ani ty nejvetsi zaklady, ktery znam i ja, jakozto neprogramator. Kdybys tomu venoval 10 tydnu, tak to davno musis vedet.
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 18:04:35
"Takze zcela zjevne neznas ani ty nejvetsi zaklady, ktery znam i ja, jakozto neprogramator. Kdybys tomu venoval 10 tydnu, tak to davno musis vedet."
Nemusím, nic nemusím. Ale to neznamená, že jsem to nečetl! I když teď nevzpomínám, že by to to na cplusplus bylo, nicéně, o tomhle zrovna vím. Jenže opajuju, že vědět není to samé jako znát! Vědět je terorie, a praxe, to je skrze první kroky ve vlastní tvorbě! Učit se lze jedině na chybách! Já teď tvořím svoje vlastní a první skripty, tzn. že to jsou MOJE první pokusy!
Název: Re:Chyba v kódu C++
Přispěvatel: eMko 20. 11. 2013, 19:04:35
Chlape, Ty mě nebudeš mít rád. Doufám, že nejsi z té naší černouhelné ďury mezi dvěma půlkama jménem Ostrava, bo bych asi musel chodit kanalama, zas rypu.

I když teď nevzpomínám, že by to to na cplusplus bylo

Jestli myslíš cplusplus.com, tak tam bych to ani nečekal. Ač je to velmi cenný zdroj informací (taky ho používám), je to spíš referenční web. Ve výkladovém slovníku taky nenajdeš podrobně vysvětlenou gramatiku jazyka; je tam stručně spíš pro případ "když zapomeneš syntax". Ne všechno, co je zažitá dobrá praxe, je i na cplusplus. Čistě mezi náma, když napíšeš #include "MyClass.cpp" kde budeš mít jak deklaraci tak implementaci, fungovat to bude taky. To neznamená, že by se to mělo dělat. V knihovně boost (což je mnohými považováno za "druhou a neoficiální základní knihovnu") máš spoustu tříd, které mají implementaci v .h souborech. Borci, co to psali, pro to mají dobrý důvod, ale neznamená to, že by se to mělo dělat všude a denně, právě naopak. A i oni na svém webu napsali zdůvodnění ;-) .

Já teď tvořím svoje vlastní a první skripty

Zas budu vypadat jako rejpal, ale C++ není skriptovací jazyk a o programech v něm napsaných nelze mluvit jako o skriptech. Ačkoliv je to možná blbost a slovíčkaření a tady všichni víme, co máš na mysli, může v jiných kontextech docházet k celkem drastickým nedorozuměním.

Učit se lze jedině na chybách!

Pravdu díš! Ale je lepší se učit na cizích chybách. Jednak je život příliš krátký na to, abys je všechny stihl spáchat sám a ještě si z nich vzít ponaučení, druhak je lepší, když je za kokota někdo jinej ;-) .
Název: Re:Chyba v kódu C++
Přispěvatel: webhope 20. 11. 2013, 19:44:12
S těma skriptama sem ujel bo sem dlouho psal v php a jiných skriptovacích jazycích. Co se týče učení, tak je to vždy tak že nejdříve je teorie, a pak praxe. A já teď mám tu praxi. Jinak nevím co k tomu ještě dodat. Snad jen, že je dobře že nevím jak vypadáš :-)