当我的对象被推入向量时,返回属性会给我错误的值

时间:2015-11-06 20:01:32

标签: c++

我是C ++的新手,并且对我遇到的问题感到困惑。

我有一个包含2个属性的类,一个字符串和一个整数。 构造函数初始化这些属性。

Classname::Constructor(string n, int x) {
   string = n;
   integer = x; }

我有一个返回这两个属性的方法。

string Classname::getString() {
   return string; }

 int Classname::getInteger() {
   return integer; }

稍后我使用构造函数创建我的对象,这些方法可以正常返回我的值。

但是,我尝试创建一个向量来存储许多这些对象。当我尝试通过索引或使用back()方法访问其中一个时,我得到整数的垃圾值。

Classname xyz = Constructor("hello", 0);

使用它将返回" hello 0"

cout << xyz.getString() << " " << xyz.getInteger()

但是一旦我这样做了......

vector<Classname> newVec;
newVec.push_back(xyz);
cout << newVec.back().getString() << " " << newVec.back().getInteger()

它实际上给了我&#34;你好-874544554&#34;或其他一些垃圾价值。

我迷路了!有什么想法吗?

1 个答案:

答案 0 :(得分:0)

将OP的代码打到一个有可能编译的表单后,我无法重现。

#include <string>
#include <iostream>
#include <vector>


class Classname
{
    std::string string; // cannot have string named string due to naming collision,
                        // but without using namespace std; there is no string. Or Zuul.
                        // there is only std::string. And perhaps std::Zuul.
    int integer;

    public:
    // a constructor needs to have the same name as the class.
    Classname(std::string n, int x) 
    {
        string = n;
        integer = x;
    }
    std::string getString()
    {
        return string;
    }

    int getInteger()
    {
        return integer;
    }
};

int main(void)
{
    // so constructing a Classname is just like any other variable except you can 
    // specify parameters.
    Classname xyz ("hello", 0);
    std::vector<Classname> newVec;
    newVec.push_back(xyz);
    std::cout << newVec.back().getString() << " " << newVec.back().getInteger()<< std::endl;
    return 0;
}