这段代码在课堂上很好用 -
const char* list[] = {"Author: ", "Label: ", "Price: ", "Date: "};
vector<string> vlist(list, list+4);
但是当我把它放到类中时,它的行为就像一个函数 - 编译器给我错误“list”不是一个类型,错误:在'+'标记之前的','或'...'等等? ?
答案 0 :(得分:1)
常见模式如下:
class MyClass {
public:
template<class It>
MyClass(It beg, It end) : vec(beg,end) { }
private:
std::vector<std::string> vec;
};
int main() {
std::string s[] = { "abc", "bcd" };
MyClass c(s, s+2);
};
答案 1 :(得分:1)
无法在类内初始值设定项中自动推导数组大小。相反,您需要指定大小:
const char* list[4] = {"Author: ", "Label: ", "Price: ", "Date: "};
您的vlist
成员可以暂时初始化:
vector<string> vlist = vector<string>(list, list + 4);
但这可能效率低下。最好在构造函数中初始化它,以避免临时性。
但是,您确定需要简单的list
数组吗?因为如果不是这样,那就更容易做到这一点:
vector<string> list = {"Author: ", "Label: ", "Price: ", "Date: "};
此外,您需要确保在编译器中启用了C ++ 11模式。使用GCC或Clang,它将是-std=c++11
或-std=g++11
(用于GNU扩展)编译器标志。
答案 2 :(得分:1)
您收到错误,因为您的类定义无法调用函数,只能声明它们。您可以使用类的构造函数中的初始化列表来解决此问题:
const char* list[] = { "Author: ", "Label: ", "Price: ", "Date: " };
class c
{
vector<string> vlist;
c() : vlist(list, list + 4) {}
}
答案 3 :(得分:0)
如果您使用的是C ++ 11,则可以通过初始化列表直接初始化矢量:
vector<string> vlist {"Author: ", "Label: ", "Price: ", "Date: "};
如果没有,你必须在构造函数中完成,很可能是push_back
:
Class::Class() {
vlist.push_back("Author :");
vlist.push_back("Label :");
vlist.push_back("Price :");
vlist.push_back("Date :");
}
无论如何,创建中间C风格表是没有意义的,如果最终你要使用vector
。