Ja die pointer heb ik... maar hoe kan ik een forward declaratie doen als het in een namespace staat?quote:Op woensdag 12 januari 2011 18:02 schreef thabit het volgende:
Je declareert in A_Class een member van type B_Class, terwijl het mogelijk is dat B_Class op dat moment nog niet gedefinieerd is. De compiler moet weten hoeveel geheugenruimte een object van een class en daarmee dus ook elke member van die class inneemt.
Als je dus dergelijke cross-references wilt toepassen dan moet je dat dus doen middels een pointer of een reference, daarvan ligt namelijk de hoeveelheid geheugenruimte gewoon vast. Je moet dan nog wel forward declaraties class A_class; en class B_class; invoegen.
1 2 3 | namespace A { class A_Class; } |
_Dinges moet natuurlijk wel een pointer of een reference zijn, zoals ik een paar posts terug heb uitgelegd.quote:Op woensdag 12 januari 2011 19:02 schreef netolk het volgende:
nee, dan krijg ik een error in header A, dat _DINGES een incomplete type is
Ow hehe, vet stom vergeten het bestand op te slaan ofzo want nu doet ie het dus welquote:Op donderdag 13 januari 2011 11:22 schreef thabit het volgende:
[..]
_Dinges moet natuurlijk wel een pointer of een reference zijn, zoals ik een paar posts terug heb uitgelegd.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | inline void file::write_part(segment *the_segment, ::nntp::decoded_article_ptr decoded) { boost::mutex::scoped_lock lock(write_mutex); // make sure we are the only ones messing with segments std::string filename; // cache file name std::string data; // cache decoded data // get the filename and data from the decoded article decoded->filename(filename, false); decoded->data(data); // open file out_file.open(filename.c_str(), std::ios_base::binary | std::ios_base::out); // if it is a multipart binary, seek to the right position if (decoded->multipart()) out_file.seekp(decoded->begin() - 1); // did we arrive at the right position? if (decoded->multipart() && out_file.tellp() != decoded->begin() - 1) std::cout << "File '" << filename << "', segment " << the_segment->segment_number() << " at position " << out_file.tellp() << ", expected to be at " << decoded->begin() - 1 << std::endl; // write the data out_file.write(data.c_str(), data.length()); // close the file out_file.close(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | inline void file::write_part(segment *the_segment, ::nntp::decoded_article_ptr decoded) { boost::mutex::scoped_lock lock(write_mutex); // make sure we are the only ones messing with segments std::string filename; // cache file name std::string data; // cache decoded data // get the filename and data from the decoded article decoded->filename(filename, false); decoded->data(data); // open file if necessary if (!out_file.is_open()) out_file.open(filename.c_str(), std::ios_base::binary | std::ios_base::out); // are we at the right spot? if (decoded->multipart() && out_file.tellp() != decoded->begin() - 1) std::cout << "File '" << filename << "', segment " << the_segment->segment_number() << " at position " << out_file.tellp() << ", expected to be at " << decoded->begin() - 1 << std::endl; // write the data out_file.write(data.c_str(), data.length()); // close the file if (the_segment->segment_number() == segment_list.size()) out_file.close(); } |
Daar heb ik al gekeken. Kan daar niets vinden wat aangeeft waarom dit niet zou moeten werken.quote:Op maandag 24 januari 2011 23:59 schreef netolk het volgende:
misschien heb je hier iets aan?
http://www.cplusplus.com/reference/iostream/ostream/seekp/
krijg je ook een foutmelding (throw) zo ja welke?
Het beste van beidequote:Op dinsdag 25 januari 2011 00:49 schreef TeringHenkie het volgende:
Lekker aan het crossposten op GoT?![]()
a->b is hetzelfde als (*a).b (tenzij een van de operators overloaded is).quote:Op dinsdag 25 januari 2011 18:44 schreef minibeer het volgende:
wat doet "->" precies? ik zie het vaak bij "this" gebruikt worden, maar ik weet niet precies wat het betekent.
ah, pointers he, ik dacht dat ik ze wel doorhad maar het blijft wennen...quote:Op dinsdag 25 januari 2011 19:01 schreef thabit het volgende:
[..]
a->b is hetzelfde als (*a).b (tenzij een van de operators overloaded is).
WTF, heb je ergens een bron waar dit wordt uitgelegd? Dat is wel erg maf gedrag.quote:Op woensdag 26 januari 2011 07:42 schreef nightsleeper het volgende:
Bedankt voor alle hulp iedereen, het probleem zat hem in het feit dat een bestaand bestand openen en daarin zoeken alles weggooit tenzij je het bestand ook met std::ios_base::in opent.
http://stdcxx.apache.org/doc/stdlibug/30-3.htmlquote:Op woensdag 26 januari 2011 09:57 schreef Core2 het volgende:
[..]
WTF, heb je ergens een bron waar dit wordt uitgelegd? Dat is wel erg maf gedrag.
gebruik dan ook gewoon std::ifstream dan gaat het altijd goedquote:Op woensdag 26 januari 2011 07:42 schreef nightsleeper het volgende:
Bedankt voor alle hulp iedereen, het probleem zat hem in het feit dat een bestaand bestand openen en daarin zoeken alles weggooit tenzij je het bestand ook met std::ios_base::in opent.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class BUILDING{ //code }; class StoreHouse:public BUILDING{ // code public: unsigned get_Wood(); unsigned get_Stone(); }; Building::StoreHouse *SHptr; Building::BUILDING *Bptr;; for(unsigned i = 0; i < _BUILDINGS.size();i++){ if(_BUILDINGS[i].get_Name() == Names::nStoreHouse){ // checkt of het wel echt een StoreHouse is en geen ander gebouw *Bptr = _BUILDINGS[i]; *SHptr = reinterpret_cast<Building::StoreHouse*>(Bptr); _WOOD += SHptr->get_Wood(); _STONE += SHptr->get_Stone(); } } |
1 | error: no match for 'operator=' in '*SHptr = (Building::StoreHouse*)Bptr' |
wtf, dat is gewoon dom van mij...quote:Op donderdag 27 januari 2011 20:52 schreef thabit het volgende:
[ code verwijderd ]
Dat sterretje aan het begin hoort er niet.
1 | *Bptr = _BUILDINGS[i]; |
1 | Bptr = &(_BUILDINGS[i]); |
txs die haakjes hoeven nietquote:Op donderdag 27 januari 2011 21:45 schreef thabit het volgende:
Het probleem zit hem in
[ code verwijderd ]
Je roept hier een assignment operator aan, terwijl Bptr niet geinitialiseerd is. Kortom, je zit iets naar een min of meer random geheugenadres te kopieren. In plaats daarvan moet je
[ code verwijderd ]
doen. (Geen idee of die haakjes daar nodig zijn, te lui om op te zoeken.). Nog netter is het om zoveel mogelijk met references ipv pointers te werken, maar soit.
Tijdje terug maar AFAIK: Met references kun je niet goochelen, een pointer kun je echt overal naartoe laten wijzen. Je kunt met references dus minder snel fouten maken.quote:Op vrijdag 28 januari 2011 13:51 schreef netolk het volgende:
txs die haakjes hoeven nietmaar waarom is het netter om met references te werken ipv met pointers?
ow zo, ik weet niet zo veel van reference maar die kan je dan ook gewoon als class.function() gebruiken? als class een reference is naar die class?quote:Op vrijdag 28 januari 2011 13:56 schreef Catbert het volgende:
[..]
Tijdje terug maar AFAIK: Met references kun je niet goochelen, een pointer kun je echt overal naartoe laten wijzen. Je kunt met references dus minder snel fouten maken.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |