我正在尝试在我的成员初始化列表中初始化一个包含多个成员的集合,我不确定语法。 **是我得到语法错误的地方(当然没有**)。谢谢。这是一个例子:
//=============================================================================
class myClass_t
{
//-----------------------------------------------------------------------------
public: // FUNCTIONS
//-----------------------------------------------------------------------------
//-------------------------------------------------------------------------
// Constructor
myClass_t
(
)
:
BaseClass_t( IDD_BASEPAGE ),
**mCapabilities( 1, 2 ),
mDevice( mCapabilities )
{
}
//-------------------------------------------------------------------------
// Destructor
~myClass_t
(
)
{
}
//-----------------------------------------------------------------------------
private: // DATA
//-----------------------------------------------------------------------------
fdx::myDevice_t mDevice;
std::set<int> mCapabilities;
}; // end of class
} // end of namespace
答案 0 :(得分:2)
如果你可以使用Boost Assign库,你要求的东西很简单:
#include <boost/assign/list_of.hpp>
...
mCapabilities(boost::assign::list_of(1)(2))
...
我刚刚在MSVC8上测试过,它运行正常。
答案 1 :(得分:1)
set
中没有可用于插入元素的构造函数。您需要在构造函数的主体中明确地调用set::insert
方法。即你需要做mCapabilities.insert(1);mCapabilities.insert(2);
。
答案 2 :(得分:0)
set
与标准容器一样,提供了一个构造函数,它将迭代器范围作为输入来构造集合。
因此,您无法直接将要插入的元素放入构造函数中,但是您可以使用静态数组来初始化其成员:
class myClass_t {
static int const m_init_values[];
static unsigned const m_init_size;
…
};
int const myClass_t::m_init_values[] = { 1, 2 };
unsigned const myClass_t::m_init_size =
sizeof m_init_values / sizeof m_init_values[0];
请注意,您需要定义类的静态常量 ,如下所示。
现在您可以在构造函数中使用这些值:
myClass_t()
: BaseClass_t(IDD_BASEPAGE)
, mCapabilities(&m_init_values, &m_init_values + m_init_size)
, mDevice( mCapabilities )
{ }
最后一句话:您的格式化非常占用空间,因此需要大量滚动才能阅读代码。您应该问自己,虚假分隔符注释和冗余换行符是否真的有助于提高可读性。通常建议不要滚动阅读一段连接的代码。
答案 3 :(得分:0)
set<int>::set()
不接受您提到的论据。要查看构造函数的可能方法,可以参考set constructor example。