使用 boost 的 program_options 时,如何确保声明在 C++ 中具有存储 class 或类型说明符?

How do I make sure that a declaration has a storage class or type specifier in C++ when using boost's program_options?

我刚刚开始学习 Boost for C++。我正在关注一个使用来自 boost 的 "program_options" 库的示例。下面是我的代码。我正在使用 Visual Studio 并且已经构建了需要构建的 boost 库,将 boost 添加到附加的 include 目录,并将 boost 添加到附加的链接器目录。

问题出在 desc.add_options()。 Visual Studio 表示此声明没有存储 class 或类型说明符。我不确定这意味着什么以及如何解决它。我一直在寻找解决方案,但我空手而归。任何帮助都是极好的。谢谢!

#include <boost/program_options.hpp>
#include <iostream>

namespace opt = boost::program_options;

opt::options_description desc("All options");


desc.add_options()
    ("apples", opt::value<int>(), "how many apples do you have")
    ("oranges", opt::value<int>(), "how many oranges do you have")
;

你不想要那个。该消息暗示的不是您错过了声明的某些部分。

那一行不是声明,你不应该试图把它变成一个声明。

这是一个典型的误解。冲突的产生是因为编译器 期望 仅在全局或命名空间范围内声明。 既然你用的是声明,就不能理解为声明,搞笑接踵而至。

修复它,例如:

#include <boost/program_options.hpp>
#include <iostream>

namespace opt = boost::program_options;

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

    opt::options_description desc("All options");

    desc.add_options()
        ("apples", opt::value<int>(), "how many apples do you have")
        ("oranges", opt::value<int>(), "how many oranges do you have")
    ;

}