C++ Cmake,Boost解析命令行

C++ Cmake,Boost解析命令行,c++,visual-c++,boost,C++,Visual C++,Boost,我有个问题。我在VS 2015中使用Cmake和boost 我打算使用cgal和assimp开发一个工具。将文件格式转换为我自己的格式。然而,我遇到了一个问题,可能很简单,但看不到它 当我按F5键时,会出现调试错误,就像我附加的两个图像一样。我还附上了我的代码。图片如下: #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 结构CMDOPTIONS{ std::字符串输入、输出、目录; 积分; }; 名称空间po=boost::program\u选项; bool进程命令行

我有个问题。我在VS 2015中使用Cmake和boost

我打算使用cgal和assimp开发一个工具。将文件格式转换为我自己的格式。然而,我遇到了一个问题,可能很简单,但看不到它

当我按F5键时,会出现调试错误,就像我附加的两个图像一样。我还附上了我的代码。图片如下:

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
结构CMDOPTIONS{
std::字符串输入、输出、目录;
积分;
};
名称空间po=boost::program\u选项;
bool进程命令行(int argc、char**argv、CMDOPTIONS和cmdoptions1){
如果(argv==nullptr){
返回false;
}
试一试{
po::选项描述描述(“程序使用”);
po::选项描述描述(“程序使用”);
说明添加选项()
(“哈尔普,h”,“哈尔普!”)
(“输入,i”,po::value(&cmdoptions1.input),“指定输入”)
(“输出,o”,po::value(&cmdoptions1.output),“指定输出”)
(“点数,p”,po::value(&cmdoptions1.points),减少点数的百分比)
(“目录,d”,po::value(&cmdoptions1.directory)->required(),“设置目录”);
变量映射虚拟机;
po::store(po::parse_命令行(argc、argv、desc)、vm);
po::通知(vm);
if(vm.count(“帮助”)){

std::cout您的
cmdoptions1
未初始化

事实上,你的
main
不应该编译(那是什么样的签名?)

此外,您正在打印指向配置值的指针

第三,当您键入
trolololxd
时,编译器没有达到您的目的

#include <boost/asio.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/stream.hpp>
#include <boost/program_options.hpp>
#include <boost/system/error_code.hpp>
#include <iostream>
#include <sstream>
#include <string>

struct CMDOPTIONS {
    std::string input, output, directory;
    int points;
};

namespace po = boost::program_options;

bool process_command_line(int argc, char **argv, CMDOPTIONS &cmdoptions1) {

    if (argv == nullptr) {
        return false;
    }

    try {
        po::options_description desc("Program Usage");
        desc.add_options()
            ("halp, h", "Halp!")
            ("input, i", po::value<std::string>(&cmdoptions1.input), "Specify Input")
            ("output, o", po::value<std::string>(&cmdoptions1.output) ,"Specify Output")
            ("points, p", po::value<int>(&cmdoptions1.points),  "% of reduced points")
            ("directory, d", po::value<std::string>(&cmdoptions1.directory)->required(), "set the directory");

        po::variables_map vm;
        po::store(po::parse_command_line(argc, argv, desc), vm);
        po::notify(vm);

        if (vm.count("help")) {
            std::cout << desc << std::endl;
            return false;
        }

    } catch (std::exception &e) {
        std::cerr << "Error: " << e.what() << std::endl;
        return false;
    } catch (int e) {
        std::cerr << "Unknown error!" << e << std::endl;
        return false;
    }

    return true;
}

int main(int argc, char **argv) {

    CMDOPTIONS cmdoptions1;
    bool result = process_command_line(argc, argv, cmdoptions1);
    if (!result)
        return -1;

    std::cout << "input"       << cmdoptions1.input     << std::endl;
    std::cout << "output"      << cmdoptions1.output    << std::endl;
    std::cout << "points"      << cmdoptions1.points    << std::endl;
    std::cout << "directory\t" << cmdoptions1.directory << std::endl;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
结构CMDOPTIONS{
std::字符串输入、输出、目录;
积分;
};
名称空间po=boost::program\u选项;
bool进程命令行(int argc、char**argv、CMDOPTIONS和cmdoptions1){
如果(argv==nullptr){
返回false;
}
试一试{
po::选项描述描述(“程序使用”);
说明添加选项()
(“哈尔普,h”,“哈尔普!”)
(“输入,i”,po::value(&cmdoptions1.input),“指定输入”)
(“输出,o”,po::value(&cmdoptions1.output),“指定输出”)
(“点数,p”,po::value(&cmdoptions1.points),减少点数的百分比)
(“目录,d”,po::value(&cmdoptions1.directory)->required(),“设置目录”);
变量映射虚拟机;
po::store(po::parse_命令行(argc、argv、desc)、vm);
po::通知(vm);
if(vm.count(“帮助”)){

std::无法检查断言的来源。您已登录到调试器。使用它!是的,在按下“重试”后,我将显示它在desc停止的位置。添加_选项。不清楚这是一个问题的原因。您会看到一个窗口,显示您遇到了断点。只需使用“中断”按钮并进行调查。您使用的boost程序选项错误…visual studio should会告诉你地点和方式
#include <boost/asio.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/stream.hpp>
#include <boost/program_options.hpp>
#include <boost/system/error_code.hpp>
#include <iostream>
#include <sstream>
#include <string>

struct CMDOPTIONS {
    std::string input, output, directory;
    int points;
};

namespace po = boost::program_options;

bool process_command_line(int argc, char **argv, CMDOPTIONS &cmdoptions1) {

    if (argv == nullptr) {
        return false;
    }

    try {
        po::options_description desc("Program Usage");
        desc.add_options()
            ("halp, h", "Halp!")
            ("input, i", po::value<std::string>(&cmdoptions1.input), "Specify Input")
            ("output, o", po::value<std::string>(&cmdoptions1.output) ,"Specify Output")
            ("points, p", po::value<int>(&cmdoptions1.points),  "% of reduced points")
            ("directory, d", po::value<std::string>(&cmdoptions1.directory)->required(), "set the directory");

        po::variables_map vm;
        po::store(po::parse_command_line(argc, argv, desc), vm);
        po::notify(vm);

        if (vm.count("help")) {
            std::cout << desc << std::endl;
            return false;
        }

    } catch (std::exception &e) {
        std::cerr << "Error: " << e.what() << std::endl;
        return false;
    } catch (int e) {
        std::cerr << "Unknown error!" << e << std::endl;
        return false;
    }

    return true;
}

int main(int argc, char **argv) {

    CMDOPTIONS cmdoptions1;
    bool result = process_command_line(argc, argv, cmdoptions1);
    if (!result)
        return -1;

    std::cout << "input"       << cmdoptions1.input     << std::endl;
    std::cout << "output"      << cmdoptions1.output    << std::endl;
    std::cout << "points"      << cmdoptions1.points    << std::endl;
    std::cout << "directory\t" << cmdoptions1.directory << std::endl;
}