【问题标题】:Creating a vector of structs using command line arguments使用命令行参数创建结构向量
【发布时间】:2014-05-04 00:53:13
【问题描述】:

我在理解创建这个结构向量的过程时遇到了一些麻烦。我将文件作为参数传递给程序,并使用它们的文件位置来创建一个包含此信息的结构。有没有办法创建结构并使用结构函数将其添加到向量中?

struct fileDetails
{
    string filePath;
    string fileName;
    string fileExt;

    void setFileDetails(char** path);
};

void fileDetails::setFileDetails(char** path)
{
    filePath = path.substr(0, path.find_last_of('\\'));
    fileExt = path.substr(path.find_last_of(".") + 1);
    fileName = path.substr(path.find_last_of('\\') + 1);
    fileName = fileName.substr(0, fileName.find_last_of('.'));
}

int main(int argc, char** argv[])
{
    vector<fileDetails> fileList;
    fileDetails fDet;

    for (int i = 0; i < argc; i++)
    {
        fDet.setFileDetails(argv[i]);
        fileList.push_back(fDet);
    }
}

或者什么是更好的方法?我尝试使用此格式执行此操作,但出现错误。

【问题讨论】:

  • 快速扫描看起来很合理。发布错误。
  • @user3521733 再看一遍。
  • 只需将char** 更改为std::string
  • 好的,编译器会告诉您该行存在类型不匹配。编译器无法将 char * 转换为 char **。你传递了一个 char *,但参数类型是一个 char **。
  • @user3521733,是的,int main(int argc, char* argv[]) 是正确的。而int main(int argc, char** argv[]) 不正确。

标签: c++ vector struct


【解决方案1】:

您有两个主要错误。

首先,char** 没有任何substr 成员函数。您可能的意思是改用std::string

void setFileDetails(std::string path);
//                  ^^^^^^^^^^^

其次,argv 中有一个不必要的 *

int main(int argc, char** argv[])
//                      ^

如果你同时修复这两个,程序will compile just fine

【讨论】:

  • 你也可以去掉char** argv[]上的[],这是比较传统的main函数的写法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
相关资源
最近更新 更多