首页 > 解决方案 > 使用文件流插入数据时,Vector 内的值不详

问题描述

我有一个模板类,其中我有一个函数,它应该读取文本文件的内容并创建一个对象,该对象被推入自己实现的向量类中。我可以编译代码,但我收到一个关于向量中第 0 个元素的非常大的数字的错误。(这是为错误处理提供的脚本生成的错误,不是任何 c++ 编译器错误。)

代码如下所示:

bool FileReading(const std::string &nameOfFile)
{
    std::ifstream readFileObj(nameOfFile);
    if (readFileObj.is_open())
    {
        T input;
        readFileObj >> input;
        PushBack(input);

        readFileObj.close();
        return true;
    }
    return false;
}

变量T 输入是一个模板变量,函数PushBack是一个将对象推入向量的函数。(不是 std push_back 函数)

我错过了一些明显的东西吗?关于流如何工作的一些基本知识?

这是我的 PushBack 函数:

void PushBack(const T &element)
{
    if (currentElementCount == maximumCapacity)
    {
        T *tempArray = new T[maximumCapacity * 2];
        for (unsigned int i = 0; i < maximumCapacity; ++i)
            tempArray[i] = normalArray[i];
        delete[] normalArray;
        maximumCapacity *= 2;
        normalArray = tempArray;
    }
    normalArray[currentElementCount] = element;
    currentElementCount += 1;
}

标签: c++templatesstreamstringstream

解决方案


我不确定我是否正确掌握了执行这些操作的上下文,但我想到了一些可能会有所帮助的想法:

  1. 您在函数中的 for 循环PushBack首先将 的值初始化i为 0,但随后您的前进步骤是++i. 这个预增量将i上升到 1 的值,然后只有在此之后才会执行 for 循环的主体。我怀疑这可能意味着您完全跳过将任何内容放入索引 0 并且稍后当您尝试访问(无效)对象时可能会遇到麻烦。也许你会更好地将这个位更改为i++?

  2. 这个模板类型 T 是否可以从单个项目中读取?我看到你有T input; readFileObj >> input;,但是你需要一个项目 T 还是你可能需要读一些东西来创建一个将被推入你的向量的 T ?如果是这种情况,问题可能就像输入流未对齐一样简单,我可能会看到一些关于无效对象的错误是有意义的。


推荐阅读