Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6582663
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 25, 20262026-05-25T16:18:33+00:00 2026-05-25T16:18:33+00:00

I have a class which parses the Command line arguments and then returns the

  • 0

I have a class which parses the Command line arguments and then returns the parsed value to the client class. For parsing, I need to pass argv to parse function. I would like to pass by reference but from what I know , we never use the ‘&’ symbol when passing arrays. Arrays are not objects that can be passed by reference. Here is my code:

#include <iostream>
#include <fstream> 
using namespace std;

class cmdline
{
    const char * ifile;
    public:

    cmdline():ifile(NULL){}

    const char  * const getFile() const
    {
        return (ifile);
    }

    void parse(int argc,const  char** argv)
    {
        //parse and assign value to ifile 
        //  ifile = optarg;
        // optarg is value got from long_getopt

    }
};

int main(int argc, char ** argv)
{
    cmdline CmdLineObj;
    CmdLineObj.parse(argc, const_cast<const char**>(argv));
    const char * const ifile = CmdLineObj.getFile();
    ifstream myfile (ifile);
    return 0;
}

1) Is the way argv is treated, correct?

2) Better way to handle, ifile?

3) I want to return ifile as reference, what change should I do, if needed?

My code works the way it is supposed to work, but the reason I came to SO is to “not-just-make-it-work” but do it properly.

Thanks for your help.

EDIT:: After Mehrdad’s comment, I edited like this:

class CmdLine
{
    const char *  ifile;

public:
    const  char  * & getFile() const
    {
        return (ifile);
    }

But I get the error – invalid initialization of reference of type ‘const char*&’ from expression of type ‘const char’

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-25T16:18:33+00:00Added an answer on May 25, 2026 at 4:18 pm

    Arrays are not objects that can be passed by reference.

    What makes you think that?

    1) Is the way argv is treated, correct?

    CmdLineObj.parse(argc, const_cast< const char** >(argv));

    Why are you const casting that? Instead of casting, you could change your definition of main to const char** argv.

    2) Better way to handle, ifile?

    Well, there is always std::string, but since all you seem to do is then pass the value to an std::ifstream I don’t see a point in using it.

    3) I want to return ifile as reference, what change should I do, if needed?

    What would be the point of returning a pointer as a reference? Are you expecting callers of getFile to actually change the member that points to such string? You shouldn’t be doing that since getFile is a const member function. If you are thinking performance, then returning a reference to a pointer in this case will actually be worse than returning the pointer by value. The string contents are not getting copied when returned from getFile, like they would if ifile was instead an std::string (in which case returning a const reference would make sense).

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a class which I'm serialising to send over a unix socket and
I have a class which implements UserControl. In .NET 2005, a Dispose method is
I have a class which is marked with a custom attribute, like this: public
I have a class which has the following constructor public DelayCompositeDesigner(DelayComposite CompositeObject) { InitializeComponent();
I have a class which looks something like this: public class Test { private
I have a class which constructor takes a Jakarta enums . I'm trying to
I have a class which inherits from QTreeWidgetItem and I intercept the click event.
I have a class which is not thread safe: class Foo { /* Abstract
I have a class which has many small functions. By small functions, I mean
I have an class which has a enum property and a boolean property, based

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.