void render(Player& Player, list Wlist);
but my error says
syntax error : identifier 'list'
maybe I am passing it wrong since list is a template, I have tried list<> Wlist, list<Wire> Wlist but no go.
void render(Player& Player, list Wlist);
but my error says
syntax error : identifier 'list'
maybe I am passing it wrong since list is a template, I have tried list<> Wlist, list<Wire> Wlist but no go.
Quote:Is it common to have using namespace std; in both the header and the source file?You shouldn't put using directives or declarations at file scope in header files, as they will also affect any file that includes that file. (It may not really matter if it's a one-person project, but it's a bad habit to get into nonetheless, IMO.)
Quote:Ouch I get a fatal linking error when passing by reference.Are you using Visual Studio? That error looks familiar, although I can't remember what it's related to. You might try doing a clean rebuild and see if it recurs.
fatal error LNK1000: Internal error during IncrCalcPtrs
Quote:Original post by jyk
As for using 'using' statements elsewhere (within functions, in source files), that's up to you, but my own preference is to qualify explicitly (e.g. std::list). It's not that much extra typing, it makes your code more clear (IMO), and if you use typedefs (which is advisable), you won't see it in your code much anyway.
class Wire;typedef std::list<Wire> aList;
Quote:
Are you using Visual Studio? That error looks familiar, although I can't remember what it's related to. You might try doing a clean rebuild and see if it recurs.
In any case, the error isn't related (directly, at least) to whether that particular argument is passed by value or reference; passing by constant reference is the right thing to do here, so you shouldn't change your code in order to work around that error (assuming that changing your code back to the way it was previously would even have that effect).
wireList.push_back(wire1);
every frame.static int once = 0; if (once == 0) { wireList.push_back(wire1); wireList.push_back(wire2); once = 1; }
static Wire wire1(5);static Wire wire2(13, 26, 13, 2);
void spawnWire { wireList.push_back(new Wire);}
void spawnWire() { wireList.push_back(Wire()); // Creates an anonymous Wire instance and adds it.}
list<Visible>::iterator visIter;
only seems to be calling the virtual function from the base(I got an error when I tried to use an abstract class with the list template):for (visIter = visList.begin() ; visIter != visList.end() ; visIter++) { visIter->drawMe(); }
class Visible{public: GLfloat posX, posY, posZ; Visible(); virtual void drawMe() {}};
class Wire: public Visible{public: int size; Wire(int Size); Wire(int atX, int atY, int atZ, int Size); void drawMe();};
Quote:So it would be advisable to put something like:That's the general idea (although you may run into problems if you're trying to forward declare Wire - you'll probably need to include the appropriate header if you're not doing so already).class Wire;typedef std::list<Wire> aList;
in my header file?
Quote:Isn't there some kind of 'do once' functionality in C++? I used this (in mainloop) as a temporary measureI doubt many languages have a special provision for 'just doing something once'. That's a fairly specific need (although probably not uncommon), and is generally something you'd code up yourself, just as you've done here (note however that a bool would probably be more appropriate than an int here).static int once = 0; if (once == 0) { wireList.push_back(wire1); wireList.push_back(wire2); once = 1; }
Quote:I'm trying to make the list now instead of the derived class (Wire) of the base class (Visible) I have made for visible objects but theSounds like slicing.
list<Visible>::iterator visIter;
only seems to be calling the virtual function from the base
Quote:Original Post by rip-off
You don't need to dynamically allocate here, unless Wire objects need non-trivial ownership semantics or are expensive to copy...