gpt4 book ai didi

c++ - Cmake、Boost解析命令行

转载 作者:行者123 更新时间:2023-11-30 03:36:48 27 4
gpt4 key购买 nike

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

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

当我按 F5 时,出现调试错误,就像我附加的两张图片一样。我还附上了我的代码。图片在这里:

enter image description here

enter image description here

#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");
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;
}

// trolololol XD
if (vm.count("input")) {
&cmdoptions1.input;
}

if (vm.count("output")) {
&cmdoptions1.output;
}

if (vm.count("points")) {
&cmdoptions1.points;
}

if (vm.count("directory")) {
&cmdoptions1.directory;
}

} 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;
}

最佳答案

您的 cmdoptions1 未初始化。

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

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

第三,当您键入 trololol XD 时,编译器无法理解您的意图。

Live On Coliru

#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;
}

关于c++ - Cmake、Boost解析命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40484104/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com