Solved

Use variable from function outside a class in a method inside a class

Posted on 2009-07-10
5
497 Views
Last Modified: 2013-11-17
Hi, I have trouble making my program to use a string from a function outside of the class in a method inside the class. How do I solve this?
When I type a text in the main and then call the method 'int calcAbs ()' I can make the method work. But when I try to give the file name using the function 'void file_name (string in_file) I can't make it work. The two functions are also working as they should. So what have I forgotten to do?
#include <string>

#include <cctype>

#include <iostream>

#include <fstream>

#include <cmath>

using namespace std;
 

const int NUMBER_OF_LETTERS = 26;  //A-Z

const int NUMBER_OF_LANGUAGES = 4;
 

class Text

{

private:

  string text ;

  int letters ;

  int other ;

  int n[NUMBER_OF_LETTERS] ;

public:

  Text() ;

  void setText ( string nyText ) ; 

  int calcAbs () ;

  void writeAbs () ;

  void absToRel ( int numb[], double histRel[] ) ;

  void plotRel ( double histRel[] ) ;

  string interpret ( double histRel[] ) ;

} ;
 

void file_name (string &in_file) ;

void read (string &in_file, string &out_string) ;
 

int main()

{

  string text ;

  int numb ;

  Text myText ; 

  

  int number[NUMBER_OF_LETTERS] = { 0 };

  double histRel[NUMBER_OF_LETTERS] = { 0 };   

  

  string in_file ;

  string out_string = "" ; 

  

  file_name (in_file) ;

  read (in_file, out_string) ;
 

  myText.setText ( text ) ;
 

  numb = myText.calcAbs () ;

  myText.writeAbs () ;

  myText.absToRel ( number, histRel ) ;

  myText.plotRel ( histRel ) ;
 

  return 0;

}

// -----------------------------------------------------

Text::Text ()

{

}

// -------------------------------------------------------

void Text::setText ( string newText ) 

{

  text = newText ;

}

// -------------------------------------------------------

int Text::calcAbs ()

{  

  letters = other = 0 ;
 

  for (int i=0; i<(int) text.length(); i++)

  {

    if (isalpha(text.at(i))) letters++ ;

    else other++ ;

  }

  

  cout << "Number of letters in the text is: " << letters << endl ;
 

  for (int i = 0; i < NUMBER_OF_LETTERS; i++ )

       n[i] = 0 ;
 

  for (int i = 0; i < (int) text.length(); i++)

  {

    int index ;

    

    if (text.at(i) >= 'a' && text.at(i) <= 'z')

    {

      index = text.at(i) - 'a'; n[index]++ ;

    }

    if (text.at(i) >= 'A' && text.at(i) <= 'Z')

    {

	    index = text.at(i) - 'A'; n[index]++ ;

    }

  }

  return letters ;

} 

//-----------------------------------------------------------

// The rest of the methods are here...

// Then comes the functions:

//------------------------------------------------------------

void file_name (string &in_file)

{

  string file_ending = ".txt" ;

  

  cout << "Type the name of the file: " << endl ;

  getline ( cin, in_file ) ;
 

  if (in_file.rfind(file_ending) != in_file.length() - 4)

    in_file.append (file_ending) ;

}

// --------------------------------------------------------

void read (string &in_file, string &out_string)

{

  string in_row ;

 

  ifstream fin ( in_file.c_str() ) ;

   

  if ( !fin ) 

  {  

    cout << "The file doesn't exist" << endl ;

    exit ( EXIT_FAILURE ) ;

  } 
 

  while ( getline (fin, in_row) )

  {

    out_string.append(in_row) ;

    out_string.append("\n") ; 

  } 

  text = out_string ;

}

Open in new window

0
Comment
Question by:PiaPia
  • 2
  • 2
5 Comments
 
LVL 40

Expert Comment

by:evilrix
ID: 24822268
>> I can't make it work
What happens?
0
 
LVL 30

Accepted Solution

by:
Zoppo earned 250 total points
ID: 24822344
Hi PiaPia,

as far as I understand the code I think the problem is in the 'read' function - unfortunateley I cannot understand how this can compile at all since I can't see where the 'text' (line 127) is declared - at least it seems as if it is a global variable because it's neither declared in 'read' nor passed to 'read'.

The 'text' you use in 'calcAbs' is a member of the 'Text' class, so it is a different variable than the 'text' set in 'read'.

In 'main' you even use 'text', but here it's a local variable ...

To correct this IMO you just need to change the line 46 to:

> myText.setText ( out_string ) ;


Hope that helps,

ZOPPO
0
 

Author Comment

by:PiaPia
ID: 24822666
Thanks Zoppo! This put me on the right track again! Thought I had tried it all, but obviously not... ;-)
0
 
LVL 30

Expert Comment

by:Zoppo
ID: 24822679
You're welcome - I'm glad I could help ...

have a nice day,

best regards,

ZOPPO
0
 
LVL 40

Expert Comment

by:evilrix
ID: 24822691
Zoppo... nice :)
0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more …
How to install Selenium IDE and loops for quick automated testing. Get Selenium IDE from http://seleniumhq.org (http://seleniumhq.org) Go to that link and select download selenium in the right hand columnThat will then direct you to their downlo…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now