Flowmonitor problem in ns3

1,231 views
Skip to first unread message

shashank

unread,
Nov 8, 2011, 5:43:21 AM11/8/11
to ns-3-users
hii
i am trying to enable the Flowmon in the code mesh.cc but i keep
getting an error like this.

Waf: Entering directory `/home/cpu56/ns-allinone-3.11/ns-3.11/build'
[ 584/1186] cxx: scratch/mesh.cc -> build/debug/scratch/mesh_16.o
../scratch/mesh.cc: In constructor ‘MeshTest::MeshTest()’:
../scratch/mesh.cc:114: error: class ‘MeshTest’ does not have any
field named ‘enableFlowMonitor’
../scratch/mesh.cc: In member function ‘void MeshTest::Configure(int,
char**)’:
../scratch/mesh.cc:139: error: ‘enableFlowMonitor’ was not declared in
this scope
../scratch/mesh.cc: In member function ‘int MeshTest::Run()’:
../scratch/mesh.cc:231: error: ‘enableFlowMonitor’ was not declared in
this scope
../scratch/mesh.cc:232: error: ‘monitor’ was not declared in this
scope
../scratch/mesh.cc:232: error: ‘flowmon’ was not declared in this
scope
../scratch/mesh.cc:239: error: ‘enableFlowMonitor’ was not declared in
this scope
../scratch/mesh.cc:241: error: ‘monitor’ was not declared in this
scope
../scratch/mesh.cc:242: error: ‘flowmon’ was not declared in this
scope
Waf: Leaving directory `/home/cpu56/ns-allinone-3.11/ns-3.11/build'
Build failed: -> task failed (err #1):
{task: cxx mesh.cc -> mesh_16.o}


why is this happening ?? i added the dependency flow-monitor in the
wscript src/mesh/examples/wscript
also added #include "ns3/flow-monitor-module.h"
i have added the following lines in MeshTest::Run ()


if (enableFlowMonitor){
//Print per flow statistics
monitor->CheckForLostPackets(Seconds(m_totalTime));
Ptr<Ipv4FlowClassifier> classifier =
DynamicCast<Ipv4FlowClassifier>(flowmon.GetClassifier());
std::map<FlowId, FlowMonitor::FlowStats> stats = monitor-
>GetFlowStats();
std::map<FlowId, FlowMonitor::FlowStats>::const_iterator i;
for (i=stats.begin();i != stats.end(); i++)
{
Ipv4FlowClassifier::FiveTuple t = classifier->FindFlow(i->first);
std::cout << "Flow " << i->first << " ( " << t.sourceAddress
<<" --> " << t.destinationAddress << " ) " << std::endl;
// std::cout << "delaySum : " << i->second.delaySum <<
std::endl;
// std::cout << "lastDelay : " << i->second.lastDelay <<
std::endl;
// std::cout << "jitterSum : " << i->second.jitterSum <<
std::endl;
// std::cout << "Tx Packets : " << i->second.txPackets <<
std::endl;
// std::cout << "Rx Packets : " << i->second.rxPackets <<
std::endl;
// std::cout << "Lost Packets : " << i->second.lostPackets <<
std::endl;
// std::cout << "Throughput : " << i->second.rxPackets *
m_packetSize * 8 /(1024 * 1024 * m_totalTime ) << "Mbps"<< std::endl;
}
}
and i give the command ./waf --run "scratch/mesh --x-size=6 --y-
size=6 --step=100 --time=100 --packet-interval=0.001 --packet-
size=1024 --interfaces=1 --pcap=0 --enableFlowMonitor=1"
on the console..
what is the mistake that i am making ??
please help me.
thanks a lot

Mitch Watrous

unread,
Nov 8, 2011, 2:58:04 PM11/8/11
to ns-3-users
Hi.

Your problem is that "enableFlowMonitor" is not defined as a command
line parameter in mesh.cc.

You need to add it in the same way as an existing option like "x-
size".

See the code in mesh.cc:

class MeshTest
{
...

private:
int m_xSize;

...
}

...

void
MeshTest::Configure (int argc, char *argv[])
{
CommandLine cmd;
cmd.AddValue ("x-size", "Number of nodes in a row grid. [6]",
m_xSize);
...
}

Try adding enableFlowMonitor using the same pattern.

Mitch

shashank

unread,
Nov 9, 2011, 12:30:46 AM11/9/11
to ns-3-users
hii Mitch

Thanks a lot for your reply,it did help me but still it is showing me
some errors ,i added bool m_enableFlowMonitor and errors relating to
that were resolved
but still some errors are displayed,the error is as follows

Waf: Entering directory `/home/cpu56/ns-allinone-3.11/ns-3.11/build'
[ 584/1186] cxx: scratch/mesh.cc -> build/debug/scratch/mesh_16.o
../scratch/mesh.cc: In member function ‘int MeshTest::Run()’:
../scratch/mesh.cc:233: error: ‘monitor’ was not declared in this
scope
../scratch/mesh.cc:233: error: ‘flowmon’ was not declared in this
scope
../scratch/mesh.cc:242: error: ‘monitor’ was not declared in this
scope
../scratch/mesh.cc:243: error: ‘flowmon’ was not declared in this
scope
Waf: Leaving directory `/home/cpu56/ns-allinone-3.11/ns-3.11/build'
Build failed: -> task failed (err #1):
{task: cxx mesh.cc -> mesh_16.o}

the lines referred to in the error are
line 233 : monitor = flowmon.InstallAll();
line 242 : monitor->CheckForLostPackets(Seconds(m_totalTime));
line 243 : Ptr<Ipv4FlowClassifier> classifier =
DynamicCast<Ipv4FlowClassifier>(flowmon.GetClassifier());

Should i be defining monitor and flowmon somewhere else also??

shashank

unread,
Nov 9, 2011, 12:52:32 AM11/9/11
to ns-3-users
hiii Mitch

i resolved that issue ,just added
FlowMonitorHelper flowmon;
Ptr<FlowMonitor> monitor;

in class Mesh Test ,thank you so much for your help,just one more
doubt though.
in the ns3 tutorial first.cc has been explained as an example to us
and in that the DataRate is 5Mbps ,what DataRate do we use in mesh.cc
as we have not specified anything in the code?

thank you very much though :)

Mitch Watrous

unread,
Nov 9, 2011, 2:40:42 PM11/9/11
to ns-3-users
All attributes have default values.

You can set these default values to be what you want, like is done in
first.cc.

See this for section in the tutorial for discussion about overriding
default attributes:

http://www.nsnam.org/docs/release/3.12/tutorial/html/tweaking.html#using-command-line-arguments

Mitch

shashank

unread,
Nov 10, 2011, 1:51:30 AM11/10/11
to ns-3-users
thank you so much Mitch..this cleared the doubt i had..you have been
such a big help to me..got a few more doubts ad posted them in this
group starting it as a new topic.would really appreciate if you go
through them.Sorry for testing your patience.
regards

On Nov 10, 12:40 am, Mitch Watrous <watr...@u.washington.edu> wrote:
> All attributes have default values.
>
> You can set these default values to be what you want, like is done in
> first.cc.
>
> See this for section in the tutorial for discussion about overriding
> default attributes:
>
>    http://www.nsnam.org/docs/release/3.12/tutorial/html/tweaking.html#us...

shashank

unread,
Nov 10, 2011, 4:41:25 AM11/10/11
to ns-3-users
hiii Mitch
i went through the page you suggested,just a small doubt though.The
simulation i am doing is for mesh topology.Will the data rate be
different for meshDevices (since Wifi comes into picture) or would the
default remain the same as told in the tutorial
--ns3::PointToPointNetDevice::DataRate=[32768bps]:
The default data rate for point to point links
or would the default data rate be different as wifi and mesh come into
picture in mesh.cc? which attribute corresponds to the datarate in
mesh.cc ?

Mitch Watrous

unread,
Nov 10, 2011, 3:16:33 PM11/10/11
to ns-3-users
Every object with attributes in mesh.cc has a default or initial
value.

You need to look at the API specification for every class that you are
interested in mesh.cc to see what those values are.

For example, have a look at the PointToPointNetDevice's attributes'
default or initial value's:

http://www.nsnam.org/docs/release/3.12/doxygen/classns3_1_1_point_to_point_net_device.html#abadc0acc43d7be62849661285399f5d3

Mitch

shashank

unread,
Nov 11, 2011, 1:58:12 AM11/11/11
to ns-3-users
hii Mitch
thank you so much for your prompt replies.Yes i did think that every
object with attribute would have an initial or default and so would be
the case in mesh.cc where there would be a default data rate.I have
done some reading,gone through the ns3 documentation and tutorial but
i didnt come across any attribute for mesh device which defines the
default data rate like the way it does for p2p link,may be i missed
something.Sorry but if you know the attribute could you just send me
the link.
i have also come across a class ns3::DataRate ,so i was wondering just
like the way we enabled the Flowmon by defining certain objects can it
be done the same way with DataRate and give the values we want for the
data rate.but i guess there should be an easier way to change the data
rate for mesh point device like the way it was explained in the
tutorial under overriding default attribute values.
can you let me know which attribute holds the data rate for mesh
device or wifi?
thanks a ton for your help!!

On Nov 11, 1:16 am, Mitch Watrous <watr...@u.washington.edu> wrote:
> Every object with attributes in mesh.cc has a default or initial
> value.
>
> You need to look at the API specification for every class that you are
> interested in mesh.cc to see what those values are.
>
> For example, have a look at the PointToPointNetDevice's attributes'
> default or initial value's:
>
>    http://www.nsnam.org/docs/release/3.12/doxygen/classns3_1_1_point_to_...

shashank

unread,
Nov 11, 2011, 2:12:24 AM11/11/11
to ns-3-users
Mitch,

The attributes defined for MeshPointDevice are only Mtu and Routing
Protocol.Has DataRate not been defined as an attribute for
meshPointDevice??
> ...
>
> read more »

Mitch Watrous

unread,
Nov 11, 2011, 2:48:23 PM11/11/11
to ns-3-users
I have never used the Mesh NetDevice, so I don't know the answer.

Sorry,
Mitch
> > > > > > > > > Yourproblemis that "enableFlowMonitor" is not defined as a command
> > > > > > > > > >  std::map<FlowId,FlowMonitor::FlowStats> stats = monitor->GetFlowStats();
>
> > > > > > > > > >  std::map<FlowId,FlowMonitor::FlowStats>::const_iterator i;
> > > > > > > > > >  for (i=stats.begin();i != stats.end(); i++)
> > > > > > > > > >  {
> > > > > > > > > >    Ipv4FlowClassifier::FiveTuple t = classifier->FindFlow(i->first);
> > > > > > > > > >        std::cout << "Flow " << i->first << " ( " << t.sourceAddress
> > > > > > > > > > <<" --> " << t.destinationAddress << " ) " << std::endl;
> > > > > > > > > > //     std::cout << "delaySum     : " << i->second.delaySum <<
> > > > > > > > > > std::endl;
> > > > > > > > > > //     std::cout << "lastDelay    : " << i->second.lastDelay <<
> > > > > > > > > > std::endl;
> > > > > > > > > > //     std::cout << "jitterSum    : " <<
>
> ...
>
> read more »

Ankan Roybardhan

unread,
Mar 21, 2013, 3:29:11 AM3/21/13
to ns-3-...@googlegroups.com
Hi,

I tried implementing flowmonitor as said by shashank... here are the results i am getting out of the gdb:
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
Reading symbols from /home/ankanroybardhan/repos/ns-3-allinone/ns-3-dev/build/scratch/mesh...done.
(gdb) r
Starting program: /home/ankanroybardhan/repos/ns-3-allinone/ns-3-dev/build/scratch/mesh 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff463317c in std::_Rb_tree<std::pair<unsigned int, unsigned int>, std::pair<std::pair<unsigned int, unsigned int> const, ns3::FlowMonitor::TrackedPacket>, std::_Select1st<std::pair<std::pair<unsigned int, unsigned int> const, ns3::FlowMonitor::TrackedPacket> >, std::less<std::pair<unsigned int, unsigned int> >, std::allocator<std::pair<std::pair<unsigned int, unsigned int> const, ns3::FlowMonitor::TrackedPacket> > >::begin (
    this=0x50) at /usr/include/c++/4.6/bits/stl_tree.h:653
653


here is my code:


/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
 * Copyright (c) 2008,2009 IITP RAS
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation;
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * Author: Kirill Andreev <and...@iitp.ru>
 *
 *
 * By default this script creates m_xSize * m_ySize square grid topology with
 * IEEE802.11s stack installed at each node with peering management
 * and HWMP protocol.
 * The side of the square cell is defined by m_step parameter.
 * When topology is created, UDP ping is installed to opposite corners
 * by diagonals. packet size of the UDP ping and interval between two
 * successive packets is configurable.
 * 
 *  m_xSize * step
 *  |<--------->|
 *   step
 *  |<--->|
 *  * --- * --- * <---Ping sink  _
 *  | \   |   / |                ^
 *  |   \ | /   |                |
 *  * --- * --- * m_ySize * step |
 *  |   / | \   |                |
 *  | /   |   \ |                |
 *  * --- * --- *                _
 *  ^ Ping source
 *
 *  See also MeshTest::Configure to read more about configurable
 *  parameters.
 */


#include "ns3/core-module.h"
#include "ns3/internet-module.h"
#include "ns3/network-module.h"
#include "ns3/applications-module.h"
#include "ns3/wifi-module.h"
#include "ns3/propagation-loss-model.h" 
#include "ns3/propagation-delay-model.h" 
#include "ns3/mesh-module.h"
#include "ns3/mobility-module.h"
#include "ns3/mesh-helper.h"

#include "ns3/flow-monitor-module.h" 

#include "ns3/packet-socket-helper.h" 

#include <iostream>
#include <sstream>
#include <fstream>

using namespace ns3;

NS_LOG_COMPONENT_DEFINE ("TestMeshScript");
class MeshTest
{
public:
  /// Init test
  MeshTest ();
  /// Configure test from command line arguments
  void Configure (int argc, char ** argv);
  /// Run test
  int Run ();
private:
  int       m_xSize;
  int       m_ySize;
  double    m_step;
  double    m_randomStart;
  double    m_totalTime;
  double    m_packetInterval;
  uint16_t  m_packetSize;
  uint32_t  m_nIfaces;
  bool      m_chan;
  bool      m_pcap;
  std::string m_stack;
  std::string m_root;
  /// List of network nodes
  NodeContainer nodes;
  /// List of all mesh point devices
  NetDeviceContainer meshDevices;
  //Addresses of interfaces:
  Ipv4InterfaceContainer interfaces;
  // MeshHelper. Report is not static methods
  MeshHelper mesh;

//Flow Monitor
        FlowMonitorHelper flowmon; 
        Ptr<FlowMonitor> monitor; 

private:
  /// Create nodes and setup their mobility
  void CreateNodes ();
  /// Install internet m_stack on nodes
  void InstallInternetStack ();
  /// Install applications
  void InstallApplication ();
  /// Print mesh devices diagnostics
  void Report ();
};
MeshTest::MeshTest () :
  m_xSize (3),
  m_ySize (3),
  m_step (50.0),
  m_randomStart (0.1),
  m_totalTime (100.0),
  m_packetInterval (0.1),
  m_packetSize (1024),
  m_nIfaces (1),
  m_chan (true),
  m_pcap (false),
  m_stack ("ns3::Dot11sStack"),
  m_root ("ff:ff:ff:ff:ff:ff")
{
}
void
MeshTest::Configure (int argc, char *argv[])
{
  CommandLine cmd;
  cmd.AddValue ("x-size", "Number of nodes in a row grid. [6]", m_xSize);
  cmd.AddValue ("y-size", "Number of rows in a grid. [6]", m_ySize);
  cmd.AddValue ("step",   "Size of edge in our grid, meters. [100 m]", m_step);
  /*
   * As soon as starting node means that it sends a beacon,
   * simultaneous start is not good.
   */
  cmd.AddValue ("start",  "Maximum random start delay, seconds. [0.1 s]", m_randomStart);
  cmd.AddValue ("time",  "Simulation time, seconds [100 s]", m_totalTime);
  cmd.AddValue ("packet-interval",  "Interval between packets in UDP ping, seconds [0.001 s]", m_packetInterval);
  cmd.AddValue ("packet-size",  "Size of packets in UDP ping", m_packetSize);
  cmd.AddValue ("interfaces", "Number of radio interfaces used by each mesh point. [1]", m_nIfaces);
  cmd.AddValue ("channels",   "Use different frequency channels for different interfaces. [0]", m_chan);
  cmd.AddValue ("pcap",   "Enable PCAP traces on interfaces. [0]", m_pcap);
  cmd.AddValue ("stack",  "Type of protocol stack. ns3::Dot11sStack by default", m_stack);
  cmd.AddValue ("root", "Mac address of root mesh point in HWMP", m_root);

  cmd.Parse (argc, argv);
  NS_LOG_DEBUG ("Grid:" << m_xSize << "*" << m_ySize);
  NS_LOG_DEBUG ("Simulation time: " << m_totalTime << " s");
}
void
MeshTest::CreateNodes ()
  /*
   * Create m_ySize*m_xSize stations to form a grid topology
   */
  nodes.Create (m_ySize*m_xSize);
  
  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
// Configure YansWifiChannel

  YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
 //wifiChannel.AddPropagationLoss 
//("ns3::LogDistancePropagationLossModel","Exponent",DoubleValue(m_exponent), 
  //"ReferenceDistance",DoubleValue(m_referenceDistance),"ReferenceLoss",DoubleValue(m_referenceLoss)); 




  wifiPhy.SetChannel (wifiChannel.Create ());
  /*
   * Create mesh helper and set stack installer to it
   * Stack installer creates all needed protocols and install them to
   * mesh point device
   */
  mesh = MeshHelper::Default ();
  if (!Mac48Address (m_root.c_str ()).IsBroadcast ())
    {
      mesh.SetStackInstaller (m_stack, "Root", Mac48AddressValue (Mac48Address (m_root.c_str ())));
    }
  else
    {
      //If root is not set, we do not use "Root" attribute, because it
      //is specified only for 11s
      mesh.SetStackInstaller (m_stack);
    }
  if (m_chan)
    {
      mesh.SetSpreadInterfaceChannels (MeshHelper::SPREAD_CHANNELS);
    }
  else
    {
      mesh.SetSpreadInterfaceChannels (MeshHelper::ZERO_CHANNEL);
    }
  mesh.SetMacType ("RandomStart", TimeValue (Seconds (m_randomStart)));
  // Set number of interfaces - default is single-interface mesh point
  mesh.SetNumberOfInterfaces (m_nIfaces);
  // Install protocols and return container if MeshPointDevices
  meshDevices = mesh.Install (wifiPhy, nodes);
  // Setup mobility - static grid topology
  MobilityHelper mobility;

  mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
                                 "MinX", DoubleValue (0.0),
                                 "MinY", DoubleValue (0.0),
                                 "DeltaX", DoubleValue (m_step),
                                 "DeltaY", DoubleValue (m_step),
                                 "GridWidth", UintegerValue (m_xSize),
                                 "LayoutType", StringValue ("RowFirst"));
  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); 

/*Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();

positionAlloc->Add(Vector (100,100,0.0));
positionAlloc->Add(Vector (100,150,0.0));
positionAlloc->Add(Vector (100,200,0.0));
positionAlloc->Add(Vector (150,100,0.0));
positionAlloc->Add(Vector (150,150,0.0));
positionAlloc->Add(Vector (150,200,0.0));
        positionAlloc->Add(Vector (200,100,0.0));
        positionAlloc->Add(Vector (200,150,0.0));
        positionAlloc->Add(Vector (200,200,0.0));

mobility.SetPositionAllocator(positionAlloc);*/




  mobility.Install (nodes);
  if (m_pcap)
    wifiPhy.EnablePcapAll (std::string ("mp-"));
}
void
MeshTest::InstallInternetStack ()
{
  InternetStackHelper internetStack;
  internetStack.Install (nodes);
  Ipv4AddressHelper address;
  address.SetBase ("10.1.1.0", "255.255.255.0");
  interfaces = address.Assign (meshDevices);
}
void
MeshTest::InstallApplication ()
{
  UdpEchoServerHelper echoServer (9);
  ApplicationContainer serverApps = echoServer.Install (nodes.Get (0));
  serverApps.Start (Seconds (0.0));
  serverApps.Stop (Seconds (m_totalTime));
  UdpEchoClientHelper echoClient (interfaces.GetAddress (0), 9);
  echoClient.SetAttribute ("MaxPackets", UintegerValue ((uint32_t)(m_totalTime*(1/m_packetInterval))));
  echoClient.SetAttribute ("Interval", TimeValue (Seconds (m_packetInterval)));
  echoClient.SetAttribute ("PacketSize", UintegerValue (m_packetSize));
  ApplicationContainer clientApps = echoClient.Install (nodes.Get (m_xSize*m_ySize-1));
  clientApps.Start (Seconds (0.0));
  clientApps.Stop (Seconds (m_totalTime));
}
int
MeshTest::Run ()
{
  CreateNodes ();
  InstallInternetStack ();
  InstallApplication ();



//Print per flow statistics 
 monitor->CheckForLostPackets(Seconds(m_totalTime)); 
 Ptr<Ipv4FlowClassifier> classifier = DynamicCast<Ipv4FlowClassifier>(flowmon.GetClassifier()); 
 std::map<FlowId, FlowMonitor::FlowStats>stats=monitor->GetFlowStats(); 
 std::map<FlowId, FlowMonitor::FlowStats>::const_iterator i; 

 for (i=stats.begin();i != stats.end(); i++) 
 { 
   Ipv4FlowClassifier::FiveTuple t = classifier->FindFlow(i->first); 
       std::cout << "Flow " << i->first << " ( " << t.sourceAddress <<" --> " << t.destinationAddress << " ) " << std::endl; 
       std::cout << "delaySum     : " << i->second.delaySum <<std::endl; 
       std::cout << "lastDelay    : " << i->second.lastDelay <<std::endl; 
       std::cout << "jitterSum    : " << i->second.jitterSum <<std::endl; 
       std::cout << "Tx Packets   : " << i->second.txPackets <<std::endl; 
       std::cout << "Rx Packets   : " << i->second.rxPackets <<std::endl; 
       std::cout << "Lost Packets : " << i->second.lostPackets <<std::endl; 
       std::cout << "Throughput   : " << i->second.rxPackets * m_packetSize * 8 /(1024 * 1024 * m_totalTime ) << "Mbps"<< std::endl; 
 } 




  Simulator::Schedule (Seconds (m_totalTime), &MeshTest::Report, this);
  Simulator::Stop (Seconds (m_totalTime));
  Simulator::Run ();
  Simulator::Destroy ();
  return 0;
}
void
MeshTest::Report ()
{
  unsigned n (0);
  for (NetDeviceContainer::Iterator i = meshDevices.Begin (); i != meshDevices.End (); ++i, ++n)
    {
      std::ostringstream os;
      os << "mp-report-" << n << ".xml";
      std::cerr << "Printing mesh point device #" << n << " diagnostics to " << os.str () << "\n";
      std::ofstream of;
      of.open (os.str ().c_str ());
      if (!of.is_open ())
        {
          std::cerr << "Error: Can't open file " << os.str () << "\n";
          return;
        }
      mesh.Report (*i, of);
      of.close ();
    }
}
int
main (int argc, char *argv[])
{
  MeshTest t; 
  t.Configure (argc, argv);
  return t.Run ();
}





COULD YOU TELL ME WHERE DID I GO WRONG??
Reply all
Reply to author
Forward
0 new messages