C ++ - 错误:表达式必须具有指向对象的类型

时间:2016-02-02 19:13:51

标签: c++ stdvector

我是C ++的新手,我正在尝试使用double for循环创建矩阵生成函数;

#include<stdio.h>
#include<vector>
#include<iostream>
#include<typeinfo>

using std::vector;

vector<int> makeMatrix(int xDim, int yDim){
   vector<int> o(xDim,yDim);
   for(int i=0; i<xDim; ++i){
      for(int j=0; j<yDim; ++j){
          o[i][j]=(i+1)*(j+1);
      }   
   }   
   return o;    
}


int main(int argc, char ** argv){
        const int xDim= 10; 
        const int yDim= 10; 

        auto v1 = makeMatrix(xDim,yDim);

        for ( int x = 0; x < xDim; x ++ ) {
                for ( int y = 0; y < yDim; y++ ) {
                        std::cout << v1[x][y] << " ";
                }
        }

        return 0;
}

我希望能够看到每个元素,所以我知道我在做什么,但我得到了;

error: expression must have pointer-to-object type

当我尝试访问它们时。

2 个答案:

答案 0 :(得分:2)

vector<int> o(xDim,yDim);创建一维向量。然后o[i][j]=(i+1)*(j+1);尝试将其用作2d向量。由于o[i]为您提供了int&来电[],因此int没有operator[]

我认为你的意思是

vector<vector<int>> o(xDim,vector<int>(yDim));

您还必须更改返回类型。那将是

vector<vector<int>> makeMatrix(int xDim, int yDim)

答案 1 :(得分:1)

vector<int> o(xDim,yDim);

创建一个int的向量,其中包含xDim(10)个元素,其值为yDim(10)。

所以它看起来像这样:{ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 }

您正在尝试创建2D矢量 你可以创建一个这样的:

vector<vector<int>> o(xDim, vector<int>(yDim));