Ik ben op dit moment bezig met dictaat van Jeroen Fokker en neem dus letterlijk zijn code over, alleen werkt het bij mij niet.
Binnen één project zijn er 7 files:
List.hpp
Queue.hpp
Net.hpp --> NetBuild.cpp
--> NetPrint.cpp
--> NetZoek.cpp
--> NetMain.cpp
NetBuild.cpp included Net.hpp en implementeert alle methoden die met builden te maken hebben.
NetPrint.cpp included Net.hpp en implementeert alle methoden die met printen te maken hebben.
NetZoek.cpp included Net.hpp en implementeert alle methoden die met zoeken te maken hebben.
List.hpp en Queue.hpp worden in de Net.hpp geincluded, omdat ze daar gebruikt worden.
NetMain.cpp included vervolgens NetBuild.cpp, NetPrint.cpp en de NetZoek.cpp en gaat zijn gang.
De foutmelding die ik krijg gaat over elke methode die in Net.hpp gedeclareerd is, bv:
"/NetZoek.cpp:89: multiple definition of `Net::zoek(char*, char*)' "
Binnen één project zijn er 7 files:
List.hpp
Queue.hpp
Net.hpp --> NetBuild.cpp
--> NetPrint.cpp
--> NetZoek.cpp
--> NetMain.cpp
NetBuild.cpp included Net.hpp en implementeert alle methoden die met builden te maken hebben.
NetPrint.cpp included Net.hpp en implementeert alle methoden die met printen te maken hebben.
NetZoek.cpp included Net.hpp en implementeert alle methoden die met zoeken te maken hebben.
List.hpp en Queue.hpp worden in de Net.hpp geincluded, omdat ze daar gebruikt worden.
NetMain.cpp included vervolgens NetBuild.cpp, NetPrint.cpp en de NetZoek.cpp en gaat zijn gang.
De foutmelding die ik krijg gaat over elke methode die in Net.hpp gedeclareerd is, bv:
"/NetZoek.cpp:89: multiple definition of `Net::zoek(char*, char*)' "
C++: Net.hpp
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
| #ifndef _NET_HPP #define _NET_HPP #include <cstdio> #include "List.hpp" #include "Queue.hpp" using namespace std; class NetNode; class NetLink; class Net; class TreeNode; class NetNode { friend class Net; friend class NetLink; char *naam; List<NetLink> wegen; NetNode(char *a) {naam = a;}; void addLink(NetNode *, int); public: void print(ostream &); }; class NetLink { friend class NetNode; friend class Net; NetNode *doel; int kosten; NetLink(NetNode *a, int b) {doel = a; kosten = b;}; public: void print(ostream &); }; class Net { List<NetNode> nodes; NetNode *findNode(char *); public: Net() {}; void addNode(char *); void addLink(char *, char *, int); void print(ostream &); TreeNode *zoek(char *, char *); }; class TreeNode { friend class Net; NetNode *netNode; TreeNode *parent; public: TreeNode(NetNode *n, TreeNode *p) {netNode = n; parent = p;}; void print(ostream &); int contains(NetNode *); }; #endif /* _NET_HPP */ |
C++: NetBuild.cpp
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
28
29
30
31
32
33
34
35
36
37
| #include "Net.hpp" using namespace std; char *kopie(char *s) { return strcpy(new char[strlen(s)+1], s); } void NetNode::addLink(NetNode *nn, int w) { wegen.add(new NetLink(nn,w)); } void Net::addNode(char* s) { nodes.add(new NetNode(kopie(s))); } void Net::addLink(char* a, char* b, int k) { NetNode *na, *nb; na = findNode(a); nb = findNode(b); na->addLink(nb, k); nb->addLink(na, k); } NetNode* Net::findNode(char *s) { for(All<NetNode>x(nodes); x.valid(); x.next()) { if(strcmp(x.value()->naam, s) == 0) { return x.value(); } return NULL; } } |
C++: NetPrint.cpp
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
28
29
30
31
32
33
34
35
36
37
| #include "Net.hpp" using namespace std; void NetNode::print(ostream& str) { str << naam << endl; } void NetLink::print(ostream& str) { str << kosten << ": "; doel->print(str); } void Net::print(ostream& str) { for(All<NetNode> node(nodes); node.valid(); node.next()) { node.value()->print(str); str << endl; for(All<NetLink> link(node.value()->wegen); link.valid(); link.next()) { link.value()->print(str); str << endl; } } } void TreeNode::print(ostream& str) { if(parent !=NULL) { parent->print(str); str << " - "; } netNode->print(str); } |
C++: NetZoek.cpp
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| #include "Net.hpp" using namespace std; int TreeNode::contains(NetNode *nn) { if(netNode == nn) { return 1; } if(parent != NULL) { return (parent->contains(nn)); } return 0; } TreeNode *Net::zoek(char* s, char* g) { NetNode *ns, *ng; TreeNode *tn, *ntn; Queue<TreeNode> queue(200); ns = findNode(s); ng = findNode(g); tn = new TreeNode(ns, NULL); queue.addAtBegin(tn); while(!queue.empty()) { tn = queue.getFromBegin(); if(tn->netNode == ng) { return tn; } for(All<NetLink> link(tn->netNode->wegen); link.valid(); link.next()) { if(!tn->contains(link.value()->doel)) { ntn = new TreeNode(link.value()->doel, tn); queue.addAtBegin(ntn); } } } return NULL; } |