Alex Sadovsky <a_sadovsky@yahoo.com> writes:
Hello everyone,
I am trying to declare, in a header file, a class that has a member of type "vector<double>" (the code is included below). ?The compiler complains that I haven't included the appropriate namespace (the error message reads, "ISO C++ forbids declaration of ?vector? with no type"), and I understand that it is looking for this:
using namespace boost::numeric::ublas;
However, I tried putting it in the header file in various places (haven't programmed in C++ in 10 years and couldn't find any online documentation to clarify this specific situation), and still no luck. ?I am definitely doing something wrong, but cannot reason out the error, as it probably has to do with the specific syntax conventions. ?Any help is appreciated!
Thanks, -Al
P.S. ?Code in header file:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ?File "airspace-graph-rectilinear-edges.h" typedef char* string; const int PHYSICAL_SPACE_DIMENSION = 2; // ?Information needed about a waypoint used in an airspace: name and physical position class WaypointConcept{ ?private: ??using namespace boost::numeric::ublas; ??string waypoint_name; ??vector<double> waypoint_position_xyh(PHYSICAL_SPACE_DIMENSION); ?public: ??string GetWaypointName(); ??vector<double> GetWaypointPosition(); }
class AirspaceGraphConcept PropertyGraphConcept<class Graph, class WaypointConcept, class vertex_index_t>; typedef Vertex* GraphPathType; ? typedef string FlightIDType; typedef boost::unordered_map<std::FlightIDType, GraphPathType> FlightIDToPathAssignmentType; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Code in the .cpp file (which includes the above header file) I am trying to compile: ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include <boost/lambda/lambda.hpp> #include <iostream> #include <iterator> #include <algorithm> #include <boost/numeric/ublas/io.hpp> #include <boost/numeric/ublas/vector.hpp> #include "airspace-graph-rectilinear-edges.h"
int main() { ????using namespace boost::numeric::ublas;
????vector<double> v(3); ????for (unsigned i = 0; i < v.size(); ++ i) ??????v (i) = 2.01*double(i); ???? ????std::cout << v << std::endl; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
You seem to missing an #include <vector> and vector should be qualified as std::vector<double>. Also, I'd consider typedef char* string; to be moderately evil given that there is a type std::string. HTH, Philipp Moeller