无法解决error C2109: 下标要求数组或指针类型

问题描述

无法解决error C2109: 下标要求数组或指针类型

最近在学习数据结构的图……以上是有问题的代码,还没有写完。但是这一段:

和这一段:

各位大神应该是看到了i或者j下面划得红线吧,问题就是出在这里。以下po出完整的代码段,但是还是没有写完。

 #include<iostream>
using namespace std;
#define MVNum 100
#define MaxInt 0
#define Int 1

/*int VerTexType;
int ArcType;*/

struct GraphAM
{
    int vexs[MVNum];
    int arcs[MVNum];
    int vexnum, arcnum;
};

void CreateUDN(GraphAM &G)
{
    int i, j, k, v1, v2;     //i,j,k用于计数,v1,v2用于储存输入一条边依附的顶点
    cout << "请输入……" << endl;
    cin >> G.vexnum >> G.arcnum;
    for (i = 0; i < G.vexnum; ++i)
        cin >> G.vexs[i];
    for (i = 0; i < G.vexnum; ++i)
        for (j = 0; j < G.vexnum; ++j)
            G.arcs[i][j] = MaxInt;
    for (k = 0; k < G.arcnum; ++k)
    {
        cin >> v1 >> v2;
        i = v1; j = v2;
        G.arcs[i][j] = Int;
        G.arcs[j][i] = G.arcs[i][j];
    }
}

int main()
{
    GraphAM * G;
}

可能会看得比较辛苦,十分抱歉&十分感谢

解决方案

1.一维数组改成二维
2.调用之前记得new或者malloc

 #include<iostream>
using namespace std;
#define MVNum 100
#define MaxInt 0
#define Int 1

/*int VerTexType;
int ArcType;*/

struct GraphAM
{
    int vexs[MVNum];
    int arcs[MVNum][MVNum];
    int vexnum, arcnum;
};

void CreateUDN(GraphAM &G)
{
    int i, j, k, v1, v2;     //i,j,k用于计数,v1,v2用于储存输入一条边依附的顶点
    cout << "请输入……" << endl;
    cin >> G.vexnum >> G.arcnum;
    for (i = 0; i < G.vexnum; ++i)
        cin >> G.vexs[i];
    for (i = 0; i < G.vexnum; ++i)
        for (j = 0; j < G.vexnum; ++j)
            G.arcs[i][j] = MaxInt;
    for (k = 0; k < G.arcnum; ++k)
    {
        cin >> v1 >> v2;
        i = v1; j = v2;
        G.arcs[i][j] = Int;
        G.arcs[j][i] = G.arcs[i][j];
    }
}

int main()
{
    GraphAM *G = new GraphAM;
    CreateUDN(*G);
}

解决方案二:

int arcs[MVNum];
arcs是一维数组,你怎么搞出两个下标?

解决方案三:

int arcs[MVNum] 改成 int arcs[MVNum][MVNum];

解决方案四:

谢谢以上的几位好心的大神,而我对我自己挺无语的……没有发现这样的错误……十分感谢几位!!!

时间: 2025-01-12 05:15:54

无法解决error C2109: 下标要求数组或指针类型的相关文章

C/C++中数组和指针类型的关系

对于数组和多维数组的内容这里就不再讨论了,前面的教程有过说明,这里主要讲述的数组和指针类型的关系,通过对他们之间关系的了解可以更加深入的掌握数组和指针特性的知识! 一个整数类型数组如下进行定义: int a[]={1,2,3,4}; 如果简单写成: a;//数组的标识符名称 这将代表的是数组第一个元素的内存地址,a;就相当于&a[0],它的类型是数组元素类型的指针,在这个例子中它的类型就是int* 如果我们想访问第二个元素的地址我们可以写成如下的两种方式: &a[1]; a+1//注意这里

c++用栈弹出指针,ERROR C2109

问题描述 c++用栈弹出指针,ERROR C2109 头文件定义模版 #ifndef STACK_H_ #define STACK_H_ template class Stack { private: int ss; int top; T * sp; public: Stack(int n); ~Stack(); void push(const T &s); T & pop(); }; template Stack::Stack(int n) { ss = n; top = 0; sp =

Python如何解决error LNK1104: 无法打开文件python34_d.lib这个问题

问题描述 Python如何解决error LNK1104: 无法打开文件python34_d.lib这个问题 解决 error LNK1104: 无法打开文件"python34_d.lib" 解决方案 这个lib文件你配置好了吗?实际存在吗 解决方案二: 这个是python的debug库文件 你是否有倒入工程

解决error while loading shared libraries: libpcre.so.1的错误

解决 error while loading shared libraries: libpcre.so.1的错误 /usr/local/webserver/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory 解决方法: 32位系统 [root@sever lib]# ln -s /usr/loc

把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另一个vector,也是将一个vector 的元素逐个赋值给另一vector 的对应元素: //将一个vector 赋值给另一vector,使用迭代器访问vector 中的元素 vector<int> ivec(10, 20); vector<int> ivec1; for (vecto

再谈C语言中数组和指针之间的互操作

我曾说过,在C语言中只有一维的数组(这是我对数组的看法),而且数组元素可以是任何类型的数据(或对象),自然也可以是另外的一个数组(因为数组也是一种数据类型).所以如果你坚持要说有多维数组,那也不是不可能的事情.我们只要把一个数组赋值给另一个数组的元素就可以了.当然了,我们必须保证在程序编译期数组的大小是一个固定的常数. 其实,数组的操作很简单的.只要我们确定一个数组的大小和指向该数组下标为0的元素的指针,其他的任何一个数组下标的运算都等同于一个对应的指针运算,所以我们说"数组和指针是可以相互操作

理解C语言——从小菜到大神的晋级之路(8)——数组、指针和字符串

       本期视频点击这里        在前面几次我们接触的数据类型都是简单数据类型,使用一个数据个体表示一个元素.C语言中还提供了多种复杂数据类型,其中最简单的一种就是数组.数组这一结构使用内存中一段连续的内存空间保存一组相同类型的变量,这些变量通过数组的下标/索引的不同相互区分.数组与指针有着十分紧密的联系,通常使用数组下标能实现的操作都可以使用指针完成,而且使用指针的程序通常效率更高.但是指针和数组也存在着一些明显的差别,如果误用将导致错误.另外,C语言中还定义了一种极为常用的特殊的

字符数组,字符指针,sizeof,strlen总结

先看下面这一段代码,读者可以自己思考一下,是否自己可以完全答对 // test.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include<cstdio> #include <string> using namespace std; struct{ short a1; short a2; s

二维数组与指针-C语言二维数组中的*(p+1)的确切含义

问题描述 C语言二维数组中的*(p+1)的确切含义 各位大师们,烦请指教一二吧.如果是在一维数组中,*(p+1)表示p+1这个地址空间或空间中的值,那么在二维数组中,p+1是指向a[1]*(p+1)是a1这个地址中的值啊?可是为什么会是地址呢? 解决方案 二维数组其实是一个小戏法,本质上还是一维数组--二维下标连续构成的数组又连续构成第一维下标.你可以像遍历一维数组那样遍历它 解决方案二: 其实a[2][3]的调用可以看成是两个调用,首先是对a进行[2]操作,然后再对a[2]的返回值进行[3]操