功能简单的问题

时间:2010-10-22 09:52:18

标签: c++

我在程序中定义了一个简单的函数,所以我在.h文件中添加了这个原型:

      double TimeCalculation (Ptr <Node> mynode,Ptr <Node> nb_node, Ptr <Ipv4> nbipv4, Ptr <Ipv4> myipv4 );

然后我写了这个函数:

    double
    TimeCalculation (Ptr <Node> mynode, Ptr <Node> nb_node, Ptr <Ipv4> nbipv4, Ptr <Ipv4> myipv4)
    {
                float cpx,expx,myexpx;
                float cpy,expy,myexpy;
                float cpz,expz,myexpz;
                Vector3D cPosition;
                double itspeed;
    /////////// finding current position and exposition for my current neighbor
                cPosition = nbipv4->GetObject<MobilityModel> ()->GetPosition ();
                cpx = nbipv4->GetObject<MobilityModel> ()->GetPosition ().x;
                cpy = nbipv4->GetObject<MobilityModel> ()->GetPosition ().y;
                cpz = nbipv4->GetObject<MobilityModel> ()->GetPosition ().z;
                expx = nb_node->exPosition.at(0);
                expy = nb_node->exPosition.at(1);
                expz = nb_node->exPosition.at(2);
                itspeed = nbipv4->GetObject<ConstantSpeedPropagationDelayModel> ()->GetSpeed ();
                Vector3D normit(0.0,0.0,0.0),mycPosition;
               //Ptr <Node> mynode;
               // Ptr <Node> nb_node;  
                //v1
                //Vector myexposition = Ipv4->GetObject<Node> ()->GetmyPosition ();
                float normitx= cpx - expx;
                float normity= cpy - expy;
                float normitz= cpz - expz; 
                float itVnorm = sqrt((normitx * normitx) + (normity * normity)+(normitz * normitz)); 

                //hamide:update the amount of exposition to current position
                //pos.insert( it2 ,cPosition); 
                nb_node->exPosition.at(0) = cPosition.x;
                nb_node->exPosition.at(1) = cPosition.y;
                nb_node->exPosition.at(2) = cPosition.z;
                //for calculating v2
                //finding exposition for my node which is calculating MPR set
                myexpx = mynode->exPosition.at(0);
                myexpy = mynode->exPosition.at(1);
                myexpz = mynode->exPosition.at(2);
                mycPosition.x = myipv4->GetObject<MobilityModel> ()->GetPosition ().x; 
                mycPosition.y = myipv4->GetObject<MobilityModel> ()->GetPosition ().y; 
                mycPosition.z = myipv4->GetObject<MobilityModel> ()->GetPosition ().z; 
                double mycpx = myipv4->GetObject<MobilityModel> ()->GetPosition ().x;
                double mycpy = myipv4->GetObject<MobilityModel> ()->GetPosition ().y;
                double mycpz = myipv4->GetObject<MobilityModel> ()->GetPosition ().z;         
                //Vector norm(0.0,0.0,0.0);
                double normx= mycpx - myexpx;
                double normy= mycpy - myexpy;
                double normz= mycpz - myexpz;
                //myexPosition.at(1) = mycPosition.at(1);
                //myexPosition.at(2) = mycPosition.at(2);
                //myexPosition.at(3) = mycPosition.at(3); 
                mynode->exPosition.at(0) = mycPosition.x;
                mynode->exPosition.at(1) = mycPosition.y;
                mynode->exPosition.at(2) = mycPosition.z;          
                double myVnorm = sqrt((normx * normx)+(normy * normy)+(normz * normz));

                //v1*v2
                float entmulti = ((normitx * normx) + (normity * normy) + (normitz * normz));
                // calculating cos for the angel between two vectors for two nodes
                float cos = (entmulti /(itVnorm * myVnorm));
                //the maximum distance a node can see its neighbor its based on the 
                //settings we choose for our topology and simulation condition
                int R = 220;
                //v is the speed of each node
                double myspeed = myipv4->GetObject<ConstantSpeedPropagationDelayModel> ()->GetSpeed ();

                double Td = (R * R)/((myspeed *myspeed)+(itspeed * itspeed)-(2 * itspeed * myspeed*cos));
                return sqrt(Td);

    }

但是当我运行我的程序它有这个错误:

debug/libns3.so: undefined reference to `ns3::olsr::RoutingProtocol::TimeCalculation(ns3::Ptr<ns3::Node>, ns3::Ptr<ns3::Node>, ns3::Ptr<ns3::Ipv4>, ns3::Ptr<ns3::Ipv4>)'
collect2: ld returned 1 exit status

并且IT也有一个问题,它不能完美运行,如果有人帮助我解决这个错误,并且如果你在我的代码中发现任何其他问题,我将非常感激。

2 个答案:

答案 0 :(得分:0)

通常,如果您希望其他源文件使用它们,则无法在源文件中定义函数模板体。编译器需要能够看到模板定义才能实例化代码。

解决方案是在头文件中定义函数模板体。

答案 1 :(得分:0)

显然你忘了链接一些图书馆二进制文件。使用gcc,您可以使用-l-option指定要链接的库。