У меня есть класс, который анализирует аргументы командной строки, а затем возвращает проанализированное значение клиентскому классу. Для разбора мне нужно передать argv
в функцию разбора. Я хотел бы перейти по ссылке, но, насколько я знаю, мы никогда не используем символ «&» при передаче массивов. Массивы не являются объектами, которые могут быть переданы по ссылке. Вот мой код:
#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) Правильно ли лечится argv
?
2) Лучший способ справиться, ifile
?
3) Я хочу вернуть ifile
в качестве ссылки, какие изменения я должен сделать, если это необходимо?
Мой код работает так, как он должен работать, но причина, по которой я пришел к SO, заключается в том, чтобы "не просто сделать это", а сделать это правильно.
Спасибо за вашу помощь.
РЕДАКТИРОВАТЬ :: После комментария Мехрдада я отредактировал так:
class CmdLine
{
const char * ifile;
public:
const char * & getFile() const
{
return (ifile);
}
Но я получаю ошибку - неверная инициализация ссылки типа "const char * &" из выражения типа "const char"