我是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;或其他一些垃圾价值。
我迷路了!有什么想法吗?
答案 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;
}