变量没有在我的构造函数中初始化

时间:2011-03-07 06:00:54

标签: c++ constructor

所以我的问题很简单,我在构造函数中初始化的数据根本就没有保存。

基本上我有针脚指向这一点。我在类中有一个构造函数

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

5 个答案:

答案 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;
};