I have a Node* hands[4]; and want to pass it into a function called Deal like Deal(deck,hands,4,"one-at-a-time",13);
When I use the following function...
void Deal(Node *deck, Node *hands[], int num_hands, const std::string &type, int num_cards)
I get this...
/tmp/ccqckP1I.o:main.cpp:(.text+0x82a): undefined reference to `CutDeck(Node*, Node*&, Node*&, std::string const&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0xb34): undefined reference to `DeleteAllCards(Node*&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0xb3f): undefined reference to `DeleteAllCards(Node*&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0x1030): undefined reference to `DeleteAllCards(Node*&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0x103e): undefined reference to `DeleteAllCards(Node*&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0x104c): undefined reference to `DeleteAllCards(Node*&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0x105a): more undefined references to `DeleteAllCards(Node*&)' follow
/tmp/ccqckP1I.o:main.cpp:(.text+0x1348): undefined reference to `CutDeck(Node*, Node*&, Node*&, std::string const&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0x1492): undefined reference to `CutDeck(Node*, Node*&, Node*&, std::string const&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0x15dc): undefined reference to `CutDeck(Node*, Node*&, Node*&, std::string const&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0x1726): undefined reference to `CutDeck(Node*, Node*&, Node*&, std::string const&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0x1870): undefined reference to `CutDeck(Node*, Node*&, Node*&, std::string const&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0x1c2d): more undefined references to `CutDeck(Node*, Node*&, Node*&, std::string const&)' follow
/tmp/ccqckP1I.o:main.cpp:(.text+0x1f8c): undefined reference to `DeleteAllCards(Node*&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0x1f9a): undefined reference to `DeleteAllCards(Node*&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0x1fa8): undefined reference to `DeleteAllCards(Node*&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0x1fb6): undefined reference to `DeleteAllCards(Node*&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0x1fc4): undefined reference to `DeleteAllCards(Node*&)'
/tmp/ccqckP1I.o:main.cpp:(.text+0x1fd2): more undefined references to `DeleteAllCards(Node*&)' follow
/usr/lib/gcc/i686-pc-cygwin/4.7.3/../../../../i686-pc-cygwin/bin/ld: /tmp/ccqckP1I.o: bad reloc address 0x1b in section `.text$_ZNSt11char_traitsIcE7compareEPKcS2_j[__ZNSt11char_traitsIcE7compareEPKcS2_j]'
collect2: error: ld returned 1 exit status
asked Oct 4, 2013 at 20:41
Jonathan Wrona
4333 gold badges7 silver badges19 bronze badges
3 Answers 3
The following prototype (the first variant you mentioned) is correct:
void Deal(Node *deck,
Node *hands[],
int num_hands,
const std::string &type,
int num_cards);
when used for example like this:
Node n;
Node* deck = &n;
Node* hands[4];
Deal(deck, hands, 4, "one-at-a-time", 13);
just note that hands in this case is just an array of pointers that don't point to any instances of Node yet. Make sure they point to valid objects before you try to use them:
for (int i = 0; i < num_hands; ++i)
hands[i] = new Node();
answered Oct 4, 2013 at 20:47
LihO
42.3k11 gold badges103 silver badges169 bronze badges
Sign up to request clarification or add additional context in comments.
4 Comments
Jonathan Wrona
I used my first option, and for some reason I get a list of undefined references to methods when I try to compile.
LihO
@JonathanWrona: Edit your question, copy-paste the errors your compiler gives you and copy-paste the lines that compiler complains about.
Jonathan Wrona
Oh, how could I pass
Node* hands[4] by reference so I can directly edit the data?LihO
You are already passing it in a way that changes are visible to the caller. You are passing an array of pointers, your function modifies these pointers (elements), not the array itself.
Node [] *hands
...should be
Node* hands[]
or
Node** hands
answered Oct 4, 2013 at 20:45
David G
97.6k41 gold badges173 silver badges258 bronze badges
Comments
One of the solutions is
Deal(Node *deck, Node **hands, int num_hands, const std::string &type, int num_cards)
You can call as you have in your example.
Comments
lang-cpp
std::array<Node, 4>.