【发布时间】:2017-03-12 15:57:40
【问题描述】:
我正在尝试使用初始化列表初始化字符串向量。但我得到了一些奇怪的行为。 如果构造函数中有多个参数,它会起作用,但如果这是唯一的参数,则会给出错误。请看下面的代码了解
// option.h file
#ifndef __OPTION_H__
#define __OPTION_H__
#include <string>
#include <vector>
namespace CppOptParser {
class Option
{
std::vector<std::string> names;
std::string description;
public:
// constructors
Option(const std::vector<std::string>& names);
Option(const std::vector<std::string>& names, const std::string& description);
// destructor
~Option();
};
} // namespace CppOptParser
#endif /* __OPTION_H__ */
// option.cpp file
#include "option.h"
namespace CppOptParser {
Option::Option(const std::vector<std::string>& names)
{
this->names = names;
}
Option::Option(const std::vector<std::string>& names, const std::string& description)
{
this->names = names;
this->description = description;
}
Option::~Option() {}
} // namespace CppOptParser
// main.cpp file
#include "option.h"
#include <iostream>
using namespace CppOptParser;
int main(int argc, char *argv[])
{
Option *opt = new Option({ "f", "filename"}); // gives error -- error C2440: 'initializing' : cannot convert from 'initializer-list' to 'CppOptParser::Option'
Option *opt1 = new Option({"f", "filename"}, "output file name"); // works fine
std::cin.get();
return 0;
}
我正在使用 Visual Studio 2013。请帮助。
【问题讨论】:
-
适用于 VS2015
-
@selbie 那么是视觉工作室的错误吗?
-
您是否安装了最新的 VS2013 服务包?
-
在 g++ 上,此代码不起作用。
-
对于初始化列表
{"string1", "string2"},我怀疑Visual Studio 会尝试将char const*直接转发到您的向量,而不将其包装在初始化列表中。您在第二个示例中明确说明了它,因此它工作正常。
标签: c++ visual-studio c++11 visual-studio-2013 constructor