我正在创建可以创建List&#s;的字符串数组的CPP应用程序。当调用初始化时,它获得了可变参数,并应将它们插入到字符串数组中。它给出了分段错误。此外,如果我删除Students_Second_Group.push(),一切正常。有什么建议?
// Main.cpp
#include "List.h"
int main() {
List Students_First_Group(4), Students_Second_Group(3);
Students_First_Group.push("Jonas Jonaits", "Tomas Tomaitis", "Petras Petraitis", "Donatas Petkevicius");
Students_Second_Group.push("Mantas Jonaitis", "Tautvydas Tomaitis", "Linas Linaitis");
return 0;
}
// List.h
#ifndef _LIST_H_
#define _LIST_H_
#include <iostream>
#include <string>
#include <vector>
#include <cstdarg>
using namespace std;
class List {
private:
size_t size;
vector<string> arr;
public:
List(int size);
void push(const char* str...);
~List();
};
#endif
// List.cpp
#include "List.h"
List::List(int s) {
if(size > 0)
size = s;
else
size = 10;
arr = vector<string> (s);
}
void List::push(const char* str...) {
va_list arg;
va_start(arg, str);
while (str) {
arr.push_back(str);
str = va_arg(arg, const char *);
}
va_end(arg);
}
List::~List() {}
答案 0 :(得分:1)
你可以用varadic模板解决你的问题但是 因为它们是模板varadic模板应该放在标题
中了解更多信息http://en.cppreference.com/w/cpp/language/parameter_pack
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class List {
private:
size_t size;
vector<string> arr;
void push() {}
public:
List(int size);
template<typename ... Rest>
void push(const char* first, Rest ... rest) {
arr.push_back(first);
push(rest...);
}
~List();
};
List::List(int s) {
if(size > 0)
size = s;
else
size = 10;
arr = vector<string> (s);
}
List::~List() {}
int main() {
List Students_First_Group(4), Students_Second_Group(3);
Students_First_Group.push("Jonas Jonaits", "Tomas Tomaitis", "Petras Petraitis", "Donatas Petkevicius");
Students_Second_Group.push("Mantas Jonaitis", "Tautvydas Tomaitis", "Linas Linaitis");
return 0;
}