将指针向量元素推回非指针向量c ++时出错

Posted

技术标签:

【中文标题】将指针向量元素推回非指针向量c ++时出错【英文标题】:error while pushing back pointer vector elements to non pointer vector c++ 【发布时间】:2021-10-14 18:36:17 【问题描述】:

当输入字的大小大于或等于 5 但它没有发生时,我试图通过下面的函数 full 中的循环将指针向量 ptrVctor 的元素推回非指针向量 myvector2。当我输入少于 5 个单词时,程序运行良好。但是当我输入超过 5 个单词时,程序并没有按预期运行,而是终止了。

Main.hpp:

#ifndef WORDS_WORDS1_H
#define WORDS_WORDS1_H

#endif //WORDS_WORDS1_H

#include <iostream>
#include <string>
#include <unistd.h>
#include <vector>
#include <algorithm>

using namespace std;
template <class T>
class MyVector 
public:
    void full(int i)
        if (i >= 5) //

            for (int j=0; j<ptrVctor->size(); j++)
                myvector2.push_back((*ptrVctor)[j]);//has problem
            
            delete ptrVctor;
            ptr_cout++;
        
    
    void setItems2( T &a)
        if (ptr_cout==0)
            ptrVctor->push_back(a);
        
        else
            myvector2.push_back(a);
        
    

    int getUsed2 ()
        if (ptr_cout==0)
            return ptrVctor->size();
        else
            return myvector2.size();
    
    void setUsed2 (int a)
        used2 = a;
    
private:
    int used2 =0;
    int ptr_cout =0;
    vector<T>* ptrVctor = new vector<T>();
    vector<T> myvector2;
;

Main.cpp:

#include "main.hpp"
int main()

    MyVector<string> v;
    int count = 0;
    string word;
    while (cin >> word) 

        count += 1;
        v.setUsed2(count);
        v.setItems2(word);
        v.full(count);
    
    cout << "Total: " << v.getUsed2() << '\n';
    return 0;

【问题讨论】:

您在任何函数之外都有一个循环 - 这是不允许的 公共循环???大声笑 错误信息是什么?答案可能已经出现在您的屏幕上。 你熟悉consturctor这个概念吗? 为什么?你正在做一些奇怪的事情。你能解释一下这样做的理由是什么? 【参考方案1】:

当你输入5时,在函数int full(int i )中,你的程序会删除ptrVctor

当您随后输入6 时,ptrVctor 已被删除,但您使用的是ptrVctor-&gt;size(),所以它就终止了。

【讨论】:

【参考方案2】:

myvector2 是一个实例变量而不是静态变量。这意味着您不能在不创建 MyVector 的实例的情况下初始化或修改该变量。

您应该在方法或构造函数中执行for 循环指令。我建议您学习并澄清您对类及其实例如何工作的概念。

【讨论】:

对不起。实际上代码很大,循环在一个函数中。错误地,我只是复制了没有该功能的 for 循环。已编辑问题并在其中包含功能。

以上是关于将指针向量元素推回非指针向量c ++时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 向量中存储指针时出错

C++11 线程:将向量传递给线程函数时出错

C - 尝试将指向函数的指针作为参数传递时出错,无法获取值

C ++将向量传递给函数:引用与指针,哪个是首选? [复制]

使用 unordered_map 值初始化指向向量的指针时出错

将数组作为 void 指针发送时,在 c 中使用 puts 输出 2d char 数组时出错