Apr 4, 2017 at 4:06pm Apr 4, 2017 at 4:06pm UTC
i'm trying to compile and run my code but it gives me the error undefined reference to `main_savitch_15::graph<int>::add_vertex(int const&)'.... i can't seem to fix it.
it's my first time posting on here. i am using Clion
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
#ifndef GRAPH_PROJECT_GRAPH_H
#define GRAPH_PROJECT_GRAPH_H
#include <cstdlib> // Provides size_t
#include <set> // Provides set
#include <cstddef>
namespace main_savitch_15
{
template <class Item>
class graph
{
public :
// MEMBER CONSTANTS
static const std::size_t MAXIMUM = 20;
// CONSTRUCTOR
graph( ) { many_vertices = 0; }
// MODIFICATION MEMBER FUNCTIONS
void add_vertex(const Item& label);
void add_edge(std::size_t source, std::size_t target);
void remove_edge(std::size_t source, std::size_t target);
Item& operator [ ] (std::size_t vertex);
// CONSTANT MEMBER FUNCTIONS
std::size_t size( ) const { return many_vertices; }
bool is_edge(std::size_t source, std::size_t target) const ;
std::set<std::size_t> neighbors(std::size_t vertex) const ;
Item operator [ ] (std::size_t vertex) const ;
private :
bool edges[MAXIMUM][MAXIMUM];
Item labels[MAXIMUM];
std::size_t many_vertices;
};
}
//#include "graph.template" // Include the implementation.
#endif
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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
#include <cassert> // Provides assert
#include <cstdlib> // Provides size_t
#include <set> // Provides set
#include "graph.h"
namespace main_savitch_15
{
template <class Item>
const std::size_t graph<Item>::MAXIMUM;
template <class Item>
void graph<Item>::add_edge(std::size_t source, std::size_t target)
// Library facilities used: cassert, cstdlib
{
assert(source < size( ));
assert(target < size( ));
edges[source][target] = true ;
}
template <class Item>
void graph<Item>::add_vertex(const Item& label)
// Library facilities used: cassert, cstdlib
{
std::size_t new_vertex_number;
std::size_t other_number;
assert(size( ) < MAXIMUM);
new_vertex_number = many_vertices;
many_vertices++;
for (other_number = 0; other_number < many_vertices; ++other_number)
{
edges[other_number][new_vertex_number] = false ;
edges[new_vertex_number][other_number] = false ;
}
labels[new_vertex_number] = label;
}
template <class Item>
bool graph<Item>::is_edge(std::size_t source, std::size_t target) const
// Library facilities used: cassert, cstdlib
{
assert(source < size( ));
assert(target < size( ));
return edges[source][target];
}
template <class Item>
Item& graph<Item>::operator [ ] (std::size_t vertex)
// Library facilities used: cassert, cstdlib
{
assert(vertex < size( ));
return labels[vertex]; // Returns a reference to the label
}
template <class Item>
Item graph<Item>::operator [ ] (std::size_t vertex) const
// Library facilities used: cassert, cstdlib
{
assert(vertex < size( ));
return labels[vertex]; // Returns only a copy of the label
}
template <class Item>
std::set<std::size_t> graph<Item>::neighbors(std::size_t vertex) const
// Library facilities used: cassert, cstdlib, set
{
std::set<std::size_t> answer;
std::size_t i;
assert(vertex < size( ));
for (i = 0; i < size( ); ++i)
{
if (edges[vertex][i])
answer.insert(i);
}
return answer;
}
template <class Item>
void graph<Item>::remove_edge(std::size_t source, std::size_t target)
// Library facilities used: cassert, cstdlib
{
assert(source < size( ));
assert(target < size( ));
edges[source][target] = false ;
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include <iostream>
#include "graph.h"
using namespace main_savitch_15;
int main() {
int num1 = 3;
graph<int > first;
first.add_vertex(num1);
first.add_vertex(2);
first.add_edge(1,0);
return 0;
}
Last edited on Apr 4, 2017 at 4:26pm Apr 4, 2017 at 4:26pm UTC
Apr 4, 2017 at 4:12pm Apr 4, 2017 at 4:12pm UTC
Your add_vertex function takes a const Item&.
In your main function you are passing in an integer an a double
Apr 4, 2017 at 4:27pm Apr 4, 2017 at 4:27pm UTC
oh forgot to change that thanks.. but it doesn't work when i pass all int either