所以我的问题很简单,我在构造函数中初始化的数据根本就没有保存。
基本上我有针脚指向这一点。我在类中有一个构造函数
strSet::strSet(std::string s){
std::vector<std::string> strVector;
strVector.push_back(s);
}
在我的主文件中我有
else if(command == "s"){
cout << "Declare (to be singleton). Give set element:";
cin >> input >> single_element;
vector_info temp;
temp.name = input;
strSet set(single_element);
set.output();
temp.vector = set;
list.push_back(temp);
}
当我的构造函数被调用并且我检查向量的长度时,答案是合适的,但是当我检查输出中向量的长度时,它会重置为0?
任何人都可以帮助我,非常感谢!!!!!!!
修改
这是我的.h文件
class strSet
{
private:
std::vector<std::string> strVector;
// This is initially empty (when constructed)
bool isSorted () const;
public:
strSet (); // Create empty set
strSet (std::string s); // Create singleton set
void nullify (); // Make a set be empty
bool isNull () const;
int SIZE() const;
void output() const;
bool isMember (std::string s) const;
strSet operator + (const strSet& rtSide); // Union
strSet operator * (const strSet& rtSide); // Intersection
strSet operator - (const strSet& rtSide); // Set subtraction
strSet& operator = (const strSet& rtSide); // Assignment
}; // End of strSet class
答案 0 :(得分:2)
strSet::strSet(std::string s){
std::vector<std::string> strVector; //line 1
strVector.push_back(s); //line 2
}
这是你的构造函数,在这里你将值存储在本地向量中,该向量在从构造函数返回时被销毁。您希望如何将数据保存在strSet中?
我相信你需要了解C ++和类的基础知识,自己阅读一本介绍性的C ++书。所以请先拿一本书然后再读一遍;这是一本非常好的书籍清单:
The Definitive C++ Book Guide and List
编辑:
如果您已将strVector
声明为类成员,则需要删除line 1
。然后它会工作。
答案 1 :(得分:1)
看起来,就像你的类体已经有strVector一样,所以你在构造函数中再次声明它,这是错误的,因为编译器引用了你的新本地strVector而不是类strVector。
您需要将构造函数更改为:
strSet::strSet(std::string s){
strVector.push_back(s);
}
答案 2 :(得分:1)
提示:GCC有一个编译器警告。使用-Wshadow来捕获这些问题。
答案 3 :(得分:0)
std::vector<std::string> strVector;
strVector.push_back(s);
在构造函数中创建一个新的本地字符串向量,并为其添加一个字符串。当构造函数退出时,它将破坏您的向量。如果希望strVector的持续时间超过构造函数,请将其设为类成员。
答案 4 :(得分:0)
您正在strSet::strSet
构造函数中初始化堆栈局部变量。当您从构造函数返回时,所有堆栈局部变量都将被销毁。
解决这个问题的方法是将strVector
变量声明为类成员变量。
一个例子:
class strSet {
public:
strSet(std::string s) {
this->strVector.push_back(s);
}
private:
std::vector<std::string> strVector;
};