Re: using STL Container across the Files
On Aug 10, 12:59 pm, James Kanze <james.ka...@gmail.com> wrote:
On Aug 8, 8:58 pm, Pallav singh <singh.pal...@gmail.com> wrote:
On Aug 7, 12:58 pm, James Kanze <james.ka...@gmail.com> wrote:
On Aug 6, 11:18 am, Pallav singh <singh.pal...@gmail.com> wrote:
How can we use STL Contianer Across the Files
example
file1.cc
map<int,int> xyz;
file2.cc
extern map<int,int> xyz;
It gives Error.
What error? With what compiler? With the compilers I use, I
have no problems with:
file1.cc:
#include <map>
std::map< int, int > xyz ;
file2.cc
#include <map>
extern std::map< int, int > xzy ;
A bit of precaution may be necessary because of order of
initialization issues, but otherwise, there's no problem.
map1.cc
#include <iostream>
#include <map>
#include <iterator>
using namespace std;
class A
{
public :
int x;
int y;
void display()const
{ cout<<" Value of x " << x << endl ;
cout<<" value of y " << y << endl ;}
};
struct compare
{
bool operator()(const A & s1, const A & s2) const
{ return ((s1.x== s2.x) && (s1.y == s2.y)); }
};
std::map<A,int,compare> object;
This is illegal. It's undefined behavior, so it may not give
you an error, but compare is not a valid. To be valid, the
comparison function must "induce a strict weak ordering on the
values". In particular, for a comparison function comp, if we
define a function equiv( a, b ) as being ! comp( a, b ) && !
comp( b, a ), then equiv must define an equivalence
relationship; for example, equiv( a, b ) && equiv( b, c ) implies
equiv( a, c ).
object.insert(pair<A,int>(A(1,2), 2));
object.insert(pair<A,int>(A(3,4), 2));
map2.cc
#include <iostream>
#include <map>
#include <iterator>
using namespace std;
extern map<A,int,compare> object;
What's A and compare, here? I don't see any definition of them.
map<A,int,compare>::iterator iter;
int main()
{
cout << "Map size: " << object.size() << endl;
for( iter = object.begin(); iter != object.end(); ++iter )
cout << (*iter).first << ": " << (*iter).second << endl;
return 0;
}
i am getting compilation error's
--
James Kanze (GABI Software) email:james.ka...@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Hi
i tried it ..........But i am getting redifnation of ostream operator
File1.cc
#include <map>
#include <iostream>
#include "File3.cc"
using namespace std;
std::map<A, int , cmp > tmp;
void func()
{
tmp.insert( pair<A , int >(A(1,1), 10) );
tmp.insert( pair<A , int >(A(2,2), 20) );
tmp.insert( pair<A , int >(A(3,3), 30) );
tmp.insert( pair<A , int >(A(4,4), 40) );
tmp.insert( pair<A , int >(A(5,5), 50) );
}
File2.cc
#include <map>
#include <iostream>
#include <iterator>
#include "File3.cc"
using namespace std;
extern std::map<A, int , cmp > tmp;
extern void func();
int main()
{
std::map< A , int ,cmp >::iterator iter;
func();
for(iter = tmp.begin(); iter != tmp.end();iter++)
{ std::cout<<(*iter).first <<" "<<(*iter).second << endl; }
return 0;
}
File3.cc
#include<iostream>
using namespace std;
class A
{
public :
int x;
int y;
A(int x1,int y1) // Constructor
{
x = x1;
y = y1;
}
int operator==(const A &rhs) const
{
if( this->x != rhs.x) return 0;
if( this->y != rhs.y) return 0;
return 1;
}
friend ostream & operator<<(ostream &, const A &);
};
ostream &operator<<(ostream &output, const A &aaa)
{
output << aaa.x << ' ' << aaa.y ;
return output;
}
struct cmp
{
bool operator()(const A & lhs, const A & rhs)
{
if(lhs.x < rhs.x ) return 1;
return 0;
}
};
g++ File1.cc File2.cc File3.cc
i am getting redifnation of ostream operator