【问题标题】:Objects not storing/retrieving correctly in vector (C++)对象未在向量中正确存储/检索(C++)
【发布时间】:2012-04-28 20:47:56
【问题描述】:

我是一个完整的 C++ 初学者。 我正在尝试做一些看起来很基本的事情:创建某个类的对象,将其存储在向量中,然后输出该对象的值。目前,无论我存储什么字符,它都会输出一个矩形字符。 代码如下:

#include <iostream>
#include <string>
#include <cstdlib>
#include <conio.h>
#include <time.h>
#include <windows.h> 
#include <vector>
#include <algorithm>
#include <map>
using namespace std;

class terrainType
{
    public:
        string name;
        char symbol;
        int freq;
        terrainType(string,char,int);
};
terrainType::terrainType(string name, char symbol, int freq)
{
    name=name;
    symbol=symbol;
    freq=freq;
}

int main()
{
    vector<terrainType> terrainTypes;
    terrainType dirt("dirt",'.',1);
    terrainTypes.push_back(dirt);
    cout << terrainTypes[0].symbol;
    return 0;
}

感谢任何建议或背景信息。谢谢!

【问题讨论】:

    标签: c++ object vector


    【解决方案1】:

    您在构造函数中的三个分配实际上是无操作的(您将每个变量分配给它自己):

    terrainType::terrainType(string name, char symbol, int freq)
    {
        name=name;
        symbol=symbol;
        freq=freq;
    }
    

    问题是您有两个称为name 的东西,并且您希望编译器能够找出在name=name 中,左侧指的是其中一个,而右侧指的是另一个.

    解决这个问题的最简洁方法是像这样更改构造函数:

    terrainType::terrainType(string name, char symbol, int freq)
    : name(name),
      symbol(symbol),
      freq(freq)
    {
    }
    

    语言的规则是这样的,这将具有预期的含义。

    另一种选择是避免使用相同的标识符来引用成员和函数参数:

    terrainType::terrainType(string name_, char symbol_, int freq_)
    {
        name=name_;
        symbol=symbol_;
        freq=freq_;
    }
    

    另一种选择是在成员访问前加上this-&gt;

    terrainType::terrainType(string name, char symbol, int freq)
    {
        this->name=name;
        this->symbol=symbol;
        this->freq=freq;
    }
    

    【讨论】:

    • 或者,通过this-&gt;name等访问数据成员。当然,在构造函数中进行成员初始化会更好。
    • 非常感谢。我更改了变量名,它工作得很好。
    • 这是我喜欢在数据成员前加上下划线的原因之一。它允许我在函数中使用相同的名称,没有下划线,也没有麻烦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    相关资源
    最近更新 更多