|
Change it in the for loop also .
Regards,
FarPointer
Blog:FARPOINTER
|
|
|
|
|
I decided to pick this apart and comment out the for loop because it is still not obvious to me where the problem is. The for loop seems to declare a pointer and initialize it to point to the beginning of the list and simply prints each item on screen until the pointer reaches the end.
That aside I notice there appears to be some conversion type error in the line above with mylist.sort(MyDataSortPredicate); See error message below.
c:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(33) : error C2664: 'void __thiscall std::list<class mydata,class="" std::allocator<class="" mydata=""> >::sort(struct std::greater<class mydata="">)' : cannot convert parameter 1 from '
bool (const class MyData &,const class MyData &)' to 'struct std::greater<class mydata="">'
No constructor could take the source type, or constructor overload resolution was ambiguous
Error executing cl.exe.
Sort.exe - 1 error(s), 0 warning(s)
mylist.sort(MyDataSortPredicate);
|
|
|
|
|
See here for the STL fix.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Harold_Wishes wrote: // Dump the list to check the result
for (list::const_iterator citer = mylist.begin();
citer != mylist.end(); ++citer)
{
cout << (*citer).m_iData << endl;
}
Don't write your own loop for this.
void printData(const MyData& data)
{
cout << data.m_iData << endl;
}
for_each(myList.begin(), myList.end(), printData);
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
This worked. But I still have commented out the code that is suppose to do the sort---> mylist.sort(MyDataSortPredicate);
C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(38) : error C2664: 'void __thiscall std::list<class MyData,class std::allocator<class MyData> >::sort(struct std::greater<class MyData>)' : cannot convert parameter 1 from '
bool (const class MyData &,const class MyData &)' to 'struct std::greater<class MyData>'
No constructor could take the source type, or constructor overload resolution was ambiguous
Error executing cl.exe.
-- modified at 15:03 Monday 10th July, 2006
|
|
|
|
|
You can either use the general sort algorithm (std::sort ) or write a specialized less<MyData>() functor that looks something like:
struct std::less<MyData>
{
bool operator()(const MyData& lhs, const MyData& rhs)
{
return lhs.m_iData < rhs.m_iData;
}
};
And then call mylist.sort(std::less<MyData>) .
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
Gotta watch those angle brackets:
void main( void )
{
list<MyData> mylist;
...
for (list<MyData>::const_iterator citer = mylist.begin();
}
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
how did u bring those mydata in-side the angular brackets .
and that horizontal slash in prev post.
Regards,
FarPointer
Blog:FARPOINTER
|
|
|
|
|
FarPointer wrote: and that horizontal slash in prev post.
Horizontal rule.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
The second link contains a good example. They are using the <vector> class. I am using the <list> class to store my list. I suppose I can use the vector example to implement what I am trying to do with the <list> class. I will have to think about this because I do not think items in lists can be accessed at random like vectors. Perhaps I am wrong on both accounts.
Regards again.
HRW
-- modified at 13:36 Monday 10th July, 2006
|
|
|
|
|
try overiding the < operator of the struct.
Chosing between vector and list you need to be careful bcoz the vector reallocates the whole data on push_back if it doesnt has space to expand ,while list is a linked list .so u need to choose according to your ease.
just bcoz you cant do sort on it doesnt mean we have to drop it , you can also write sort from scratch.
Regards,
FarPointer
Blog:FARPOINTER
|
|
|
|
|
Harold,
You'll do much better if you get (1) a copy of Stroustrup and (2) a copy of Josuttis. Read them in that order. Because what you want to do is trivial and will be explained by the first book; putting in the time for the second will be worth it.
earl
|
|
|
|
|
Are these C++ authors of C++ books? I will look for them. I did not see anything in the Deitel & Deitel book that was too helpful.
|
|
|
|
|
Hit up amazon for those two. Stroustrup largely invented C++ and wrote one of the definitive books on it; Josuttis wrote a book on the standard library that is a great complement to the former.
|
|
|
|
|
I did check amazon and saw several books by Stroustrup. Do you know the title of the book?
-- modified at 21:13 Monday 10th July, 2006
|
|
|
|
|
http://www.amazon.com/gp/product/0201700735/sr=8-1/qid=1152627803/ref=pd_bbs_1/002-6564248-4536802?ie=UTF8
http://www.amazon.com/gp/product/0201379260/002-6564248-4536802?n=283155
|
|
|
|
|
Simply define an ordering by implementing operator < . i.e.
struct data
{
string Length;
string Sequence;
string N_Terminal;
string C_Terminal;
friend bool operator<(const data &L, const data &R)
{
return L.Sequence<R.Sequence;
}
};
g_DataList.sort();
Steve
|
|
|
|
|
So after creating the list, doesn't the sort function take in one parameter of type data? And will the list be printed in sorted order after the sort function is invoked?
|
|
|
|
|
The list already knows the type of the data it contains. There are two member functions of list called sort : one with no parameters and one which takes a predicate. I'm using the one which takes no parameters and overloading operator < . Give it a try and see if it works for you.
Steve
|
|
|
|
|
Thanks! This really helps because my goal is to actually compare the string length of the Sequence variable and assign that value to int Number as I have it defined below:
struct data
{
int Number;
string Length;
string Sequence;
string N_Terminal;
string C_Terminal;
friend bool operator<(const data &L, const data &R)
{
return L.number > R.number;
}
};
Then I invoke the sort after the list has been populated with items.
g_DataList.sort();
You will notice I overloaded the > operator instead of the < operator since I need the longest strings to appear first.
The thing I do not quite get is how the compiler knows what const data &L and const data &R are when they are passed by reference in the friend function. I'm not making the connection between the comparison and the sort function? Perhaps I do not understand the sorting algorithym. I confess my lack of programming experience even though I have the program working like a champ at this stage.
Regards,
HRW.
-- modified at 4:40 Tuesday 11th July, 2006
|
|
|
|
|
A friend function is really a global function, not a member function. This would be clearer if the declaration and the definition were separated as is shown below:
struct data
{
int Number;
string Length;
string Sequence;
string N_Terminal;
string C_Terminal;
friend bool operator<(const data &L, const data &R);
};
bool operator<(const data &L, const data &R)
{
return L.number > R.number;
}
In this example the function doesn't even need to be made a friend as it doesn't access any protected or private members. With this modification it looks like this:
struct data
{
int Number;
string Length;
string Sequence;
string N_Terminal;
string C_Terminal;
};
bool operator<(const data &L, const data &R)
{
return L.number > R.number;
}
When the compiler sees a < and one or both of the parameters (the expressions to the left and right of the < ) is a user defined type it looks for a user defined operator< . It chooses from all the candidates by matching the types in the expression it is compiling with the types of the operator.
Steve
|
|
|
|
|
Hey if anyone knows about RTI functions, please tell me
if function ClassInIt is declared to publish a certain object and
function InIt is used to subscribe to a certain object.
static void classInit(<br />
RTI::RTIambassador* rtiAmb );<br />
<br />
<br />
static void Init(RTI::RTIambassador* rtiAmb);
Thanks,
Jay
-- modified at 10:43 Monday 10th July, 2006
|
|
|
|
|
That is implementation specific ... and I don't have the RTI-NG source code to look at.
You'd have to show me the source or documentation for those 2 methods for me to be able to tell you exactly what they do.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
This is for CallInIt
void Ball::classInit( RTI::RTIambassador* rtiAmb )<br />
{<br />
ObjectRoot::ms_rtiAmb = rtiAmb;<br />
ObjectRoot::ms_classIdStr = ms_ballIdStr;<br />
<br />
if ( ms_rtiAmb )
{<br />
ms_classId = ms_rtiAmb->getObjectClassHandle( ms_classIdStr );<br />
ms_ballId = ms_rtiAmb->getObjectClassHandle( ms_ballIdStr );<br />
ms_ballLocationXId = ms_rtiAmb->getAttributeHandle( ms_ballLocationXIdStr, ms_ballId );<br />
ms_ballLocationYId = ms_rtiAmb->getAttributeHandle( ms_ballLocationYIdStr, ms_ballId );<br />
ms_ballVelocityXId = ms_rtiAmb->getAttributeHandle( ms_ballVelocityXIdStr, ms_ballId );<br />
ms_ballVelocityYId = ms_rtiAmb->getAttributeHandle( ms_ballVelocityYIdStr, ms_ballId );<br />
ms_clockTickId = ms_rtiAmb->getInteractionClassHandle( ms_clockTickIdStr );<br />
ms_clockTickNumId = ms_rtiAmb->getParameterHandle( ms_clockTickNumIdStr, ms_clockTickId );<br />
ms_clockTickTimeId = ms_rtiAmb->getParameterHandle( ms_clockTickTimeIdStr, ms_clockTickId );<br />
ms_clockTickIntervalId = ms_rtiAmb->getParameterHandle( ms_clockTickIntervalIdStr, ms_clockTickId );<br />
}<br />
}
This is for InIt
void RoundTable::Init( RTI::RTIambassador* rtiAmb )<br />
{<br />
ms_rtiAmb = rtiAmb;<br />
<br />
if ( ms_rtiAmb )<br />
{<br />
<br />
try<br />
{<br />
ms_tableTypeId = ms_rtiAmb->getObjectClassHandle( ms_tableTypeStr );<br />
ms_radiusTypeId = ms_rtiAmb->getAttributeHandle( ms_radiusTypeStr,<br />
ms_tableTypeId); <br />
ms_coefElastTypeId = ms_rtiAmb->getAttributeHandle( ms_coefElastTypeStr,<br />
ms_tableTypeId);<br />
ms_coefFrictionTypeId = ms_rtiAmb->getAttributeHandle( ms_coefFrictionTypeStr,<br />
ms_tableTypeId);<br />
}<br />
catch(RTI::FederateNotExecutionMember e)<br />
{<br />
cerr<<"RoundTable Exception: "<<__LINE__<<endl; <br />
}<br />
}<br />
}
|
|
|
|
|
Is there any sites or books that I can use to study the RTI syntax and how federates get published when another federate subscribes for it. And also the use of Id's in variables. Im a beginner in this and in need of some serious help. It would be great if you can point me to some books or sites.
Thanks,
Jay
|
|
|
|