The following code is part of a program to document the book in my house, like those things they have at public libraries. I learned about minupulating files in programs last night and have many errors in this program.

First, the c-style string for filename comes out as - filename.txt" instead of without the quote

And even if you try running my program with a default filename like newbook it turns out to fail.

Book::Book(string Title,string AuthorLastName,string AuthorFirstName,string PublishingCompany,int SeriesNumber,int NumPages,int CopyrightYear,string Series):
m_Title(Title),
m_Series(Series),
m_AuthorFirstName(AuthorFirstName),
m_AuthorLastName(AuthorLastName),
m_PublishingCompany(PublishingCompany),
m_SeriesNumber(SeriesNumber),
m_NumPages(NumPages),
m_CopyrightYear(CopyrightYear)
{
fstream filehandle;
string filename=m_Title+".txt";

char m_filename[80];
for(int i=0;i<filename.size();++i)
{
        m_filename[i]=filename[i];
}
cout<<m_filename;
filehandle.open(m_filename);




if (!filehandle || !filehandle.good())
{
std::cout << "could not open file!\n";
}
filehandle << "out" << std::endl;
if (filehandle.fail())
{
std::cout << "failed to append to file!\n";
}

filehandle<<m_Title<<"\n";
filehandle<<m_AuthorFirstName<<" "<<m_AuthorLastName<<"\n";
filehandle<<"Published by "<<m_PublishingCompany<<" in "<<m_CopyrightYear<<"\n";
filehandle<<"No. "<<m_SeriesNumber<<" in the "<<m_Series<<" series\n";
filehandle<<m_NumPages<<" pages\n";      
                                                     
}

simply use the 'c_str' function of the string class to convert to c-style string.

Please see my comments below

Book::Book(string Title,string AuthorLastName,string AuthorFirstName,string PublishingCompany,int SeriesNumber,int NumPages,int CopyrightYear,string Series):
m_Title(Title),
m_Series(Series),
m_AuthorFirstName(AuthorFirstName),
m_AuthorLastName(AuthorLastName),
m_PublishingCompany(PublishingCompany),
m_SeriesNumber(SeriesNumber),
m_NumPages(NumPages),
m_CopyrightYear(CopyrightYear)
{
fstream filehandle;
string filename=m_Title+".txt";

char m_filename[80];
for(int i=0;i<filename.size();++i)
{
        m_filename[i]=filename[i];
}
//the c-style string should end with a '\0', 
//so add line m_filename[i] = '\0'; 
//define i out of the for statement
cout<<m_filename;
filehandle.open(m_filename);

// the simplest way is to use filehandle.open(filename.c_str());
                                                     
}
This article has been dead for over six months. Start a new discussion instead.