Solved

Problem with reading into a struct - getline

Posted on 2004-03-21
5
1,440 Views
Last Modified: 2013-12-14
I want to read information from a text file into an array of structs of type AddWithdrawal. I got this code from another question on this site, but it won't work for me (i don't think that it's anything to do with the code, but something to do with my compiler maybe?) I'm using Visual C++.Net

ifstream inp;
    string line;

    inp.open(FileName);
    for(int i=0;i<2;i++)
    {
        getline(inp,AddWithdrawal[i].Username); //ERRORS ARE WITH THIS LINE

        // use stringstream to read entire line
        getline(inp,line);
        stringstream ss(line);
        ss >> AddWithdrawal[i].BookID;

        cout << AddWithdrawal[i].Username << endl;
        cout << AddWithdrawal[i].BookID << endl;
    }

When I try and compile that code, I get these errors for the first getline statement:
h:\LibraryV1\BookMgr.cpp(114): error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : expects 3 arguments - 2 provided
h:\LibraryV1\BookMgr.cpp(114): error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::ifstream'
h:\LibraryV1\BookMgr.cpp(114): error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'std::basic_string<_Elem,_Traits,_Ax> &' from 'char [10]'

Then if I try and add a third argument (my delimiter)
getline(inp,AddWithdrawal[i].Username,'*');
 I get these errors with the same line:
h:\LibraryV1\BookMgr.cpp(114): error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : expects 2 arguments - 3 provided
h:\LibraryV1\BookMgr.cpp(114): error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::ifstream'
h:\LibraryV1\BookMgr.cpp(114): error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : could not deduce template argument for 'std::basic_string<_Elem,_Traits,_Ax> &' from 'char [10]'

This is what I've included at the start of the class
#include <string>
#include <vector>
using namespace std;

#include "Structs.h" //headerfile I've created
#include "BookMgr.h" //headerfile I've created

#include <iostream>
#include <fstream>
#include <sstream> // for stringstream

Thanks
0
Comment
Question by:aideenobrien2000
  • 2
  • 2
5 Comments
 
LVL 48

Expert Comment

by:AlexFM
Comment Utility
What is AddWithdrawal[i].Username type?
0
 
LVL 48

Assisted Solution

by:AlexFM
AlexFM earned 200 total points
Comment Utility
This code fragment is compiled if AddWithdrawal[i].Username has std::string type.
0
 
LVL 30

Expert Comment

by:Axter
Comment Utility
Your error shows that Username is of type char Username[10].

You can either change it to type std::string as AlexFM has suggested, or use a temporary std::string variable, and then copy it to Username.
You could also use the input operators, but then you'll only get the first word.

inp >> AddWithdrawal[i].Username;
0
 
LVL 30

Accepted Solution

by:
Axter earned 300 total points
Comment Utility
You already are using Line as a temporary variable.
So you could also do the following:
getline(inp,line);
strcpy(AddWithdrawal[i].Username, line.c_str());
0
 
LVL 8

Expert Comment

by:mnashadka
Comment Utility
Also, make sure that you #include <string> to get this version of the getline function. I know that it doesn't make much sense that the std::string class would be defined at all without #include <string> being there, but I've run into it before.  Good luck.
0

Featured Post

Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

Join & Write a Comment

C++ Properties One feature missing from standard C++ that you will find in many other Object Oriented Programming languages is something called a Property (http://www.experts-exchange.com/Programming/Languages/CPP/A_3912-Object-Properties-in-C.ht…
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…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

744 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

11 Experts available now in Live!

Get 1:1 Help Now