C ++的命令行参数?

时间:2014-02-15 16:48:29

标签: c++

对于我的作业,它说我在main.cpp中使用命令行参数./a.out user1.txt(文本文件名可以更改)。

我的main.cpp

中有以下内容
int main(int argc, char* argv[]){
    string name;
    name = argv[1];
}

但不知道如何在BBoard cpp

中将名字输入我的BBoard设置功能
#include "BBoard.h"
#include <fstream>
#include <algorithm>
using namespace std;

User user_l;
BBoard::BBoard(){
    title = "Default BBoard";
    vector<User> user_list;
    User current_user;
    vector<Message> message_list;
}

BBoard::BBoard(const string &ttl){
    title = ttl;
}

void BBoard::setup(const string &input_file){
    ifstream fin;;
    fin.open(input_file);
    while(!fin.eof()){
        user_list.push_back(user_l);
    }
}

这里有BBoard标题

#ifndef BBOARD_H
#define BBOARD_H

#include <iostream>
#include <string>
#include <vector>
using namespace std;
class User
{
public:
    User() { }

    User(const std::string& _name, const std::string& _pass)
        : name(_name), pass(_pass)
    { }

    friend bool operator==(const User& lhs, const User& rhs)
    {
        return (lhs.name == rhs.name) &&
               (lhs.pass == rhs.pass);
    }
private:
    std::string name;
    std::string pass;
};
class Message{
};
class BBoard{
private:
    string title;
    vector<User> user_list;
    User current_user;
    vector<Message> message_list;
public:
    BBoard();
    BBoard(const string &ttl);
};

#endif

编辑:如何使用main cpp中的对象将名称发送到我的BBoard函数?当我尝试将主cpp包含在我的电路板cpp中时,我会收到错误。

2 个答案:

答案 0 :(得分:1)

你真是太近了。您只需编辑main()函数即可创建BBoard对象,并将name传递给它,方法与将argv[1]传递给std::string的方式相同。然后,您可以调用该对象上的函数,或将该对象传递给其他函数。


风格建议:

如果有人忘记将文件名传递给程序会怎么样?就目前而言,你崩溃了。如果argc只有1,那么很容易告诉用户错误和保释:

if (argc == 1) {
    cout << "usage: a.out file.txt\n";
    return 1;
}

并非所有程序员都使用using namespace std。在.cpp文件中执行此操作没有任何问题,但我个人感到不安#include - 未经我的同意,头文件会为我调用using namespace XXX实际上,您的头文件已经完全限定了std命名空间中的内容,因此您可以从标题中删除该行而无需进行其他更改。让我免于沮丧我使用您的标头,您只需从标头中删除using namespace std并使用std::vector而不是简单的vector

答案 1 :(得分:1)

如何创建BBoard,然后调用setup函数:

if (argc > 1) {
   string name = argv[1];
   BBoard board;
   board.setup(name);
}