【问题标题】:Getting this error: request for member 'at' in 'array3', which is of pointer type收到此错误:请求“array3”中的成员“at”,它是指针类型
【发布时间】:2020-09-03 12:59:38
【问题描述】:

函数apply_all应该将array2(size2)的所有元素与array1(size1)的所有元素相乘,并将它们存储在一个动态创建的向量(size1*size2)中 编译器提到这一行错误:array3.at(i)=array1.at(k)*array2.at(j);

#include <iostream>
#include <vector>
using namespace std;

vector<int> *apply_all(vector<int>&array1,size_t &size1,vector<int>&array2,size_t &size2)
{
    vector<int> *array3{nullptr};
    array3=new vector<int>(size1*size2);  //heap memory allocated using vectors
    size_t i{0};
    for (size_t j=0;j<size2;j++){
        for (size_t k=0;k<size1;k++){
            array3.at(i)=array1.at(k)*array2.at(j);
            i++;
        }
    }
    return array3;
}

【问题讨论】:

  • array3 是一个指针。使用-&gt;
  • 为什么不坚持使用向量?您是否有理由搞乱手动内存管理?
  • 我试图解决的问题告诉我使用 array3 的动态内存来测试我的知识,因为我是这个主题的新手。
  • @ArpanBose -- array3=new vector&lt;int&gt;[size1*size2]; -- 看起来不对。您正在动态创建size1*size2,向量?
  • @PaulMcKenzie 是的,我试图动态创建 size1*size2 的向量。我不明白这里有什么问题。请澄清

标签: c++ pointers vector compiler-errors


【解决方案1】:

分配向量简直太疯狂了。使用向量的大部分优点(例如不必手动管理内存)会立即消失。而是在堆栈上创建你的向量,像这样

vector<int> apply_all(vector<int>&array1,size_t &size1,vector<int>&array2,size_t &size2)
{
    vector<int> array3(size1*size2);
    ...
    return array3;
}

这也修复了您所询问的错误。

向量从堆中分配它们的内存,但没有必要从堆中分配向量本身

【讨论】:

    猜你喜欢
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多