Please help:
g++ (GCC) 3.4.4
I have two ‘.hpp’ files: ‘UnionFind.hpp’ and “Graph.hpp”. The content of the files is as follows:
#ifndef UNIONFIND_HPP
#define UNIONFIND_HPP
#include <vector>
using std::vector;
class UnionFind
{
public:
UnionFind(uint32_t size);
~UnionFind();
int find(uint32_t target);
void join(uint32_t a, uint32_t b);
void print();
private:
uint32_t size;
uint32_t* index;
vector<uint32_t>** sets;
};
#endif
And the other:
#ifndef GRAPH_HPP
#define GRAPH_HPP
#include <set>
using std::set;
class Graph
{
public:
Graph(uint32_t width, uint32_t length, uint32_t startN, uint32_t startP, uint32_t endN, uint32_t endP);
~Graph();
int cost(uint32_t a, uint32_t b);
void set(uint32_t a, uint32_t b, uint32_t cost);
void print();
bool inPath(uint32_t node);
private:
int32_t** adjList;
uint32_t startN;
uint32_t startP;
uint32_t endN;
uint32_t endP;
set<uint32_t>* path;
const uint32_t width;
const uint32_t length;
const uint32_t size;
const uint32_t listWidth;
};
#endif
For some reason I get the following errors:
./Graph.hpp:23: error: ISO C++ forbids declaration of `set' with no type
./Graph.hpp:23: error: expected `;' before '<' token
I had previously run into the problem of not including ‘using std::vector’ in the ‘UnionFind.hpp’, but adding ‘using std::set’ to ‘Graph.hpp’ does not fix the problem. Also,
I’ve tried ‘using std::set< uint32_t >’, but this gives the following errors:
./Graph.hpp:6: error: a template-id may not appear in a using-declaration
./Graph.hpp:23: error: ISO C++ forbids declaration of `set' with no type
./Graph.hpp:23: error: expected `;' before '<' token
Change
to
The compiler understands set to mean the
set()method you’ve declared in your class.It’s bad style to put
using ...;in a header file because you force that on everyone who includes your header file. Always use explicit namespaces in header files. Saveusing ...;for source files.