【问题标题】:Error C++ invalid types 'int[int]' for array subscript数组下标的错误 C++ 无效类型“int [int]”
【发布时间】:2021-05-04 05:56:22
【问题描述】:

我对这段代码有疑问。我不知道为什么它是错误的。我不知道如何解决它。 不久前我开始学习 C++,如果问题很愚蠢,请见谅。 这是大学的特殊数学练习,我们有一位老师什么都没有解释。

附: Visual Studio Code,编译器MinGW

谢谢~

enter image description here

#include <iomanip>
#include <conio.h>
#include <stdlib.h>
#include <string>
#include <fstream>
#include <windows.h>

using namespace std;
int **matriceAdiacenta;
int matriceAdiacentaLungime = 0;
int **matriceIncidenta;
int matriceIncidentaLungime = 0,
matriceIncidentaArcs = 0;
int **ListAdiacentaiacenta;
int ListAdiacentaiacentaLungime = 0;
int meniu, tipcitireMeniu;
int **Virfulmatrice;
int virfmatrice=0;
fstream citireadinFisier;

void displayMtrAdiacenta()
{
system("cls");
if (matriceAdiacentaLungime < 1)
cout << "Va rugam sa introduceti o matrice adiacenta" << endl;
else
{
int i, j;
cout << "Matricea de adiacenta:" << endl;
for (i = 1; i <= matriceAdiacentaLungime; i++)
{
for (j = 1; j <= matriceAdiacentaLungime; j++)
cout << matriceAdiacenta[i][j] << " ";
cout << endl;
}
}
cout << endl
<< "Tastati oricare buton pentru revenirea la meniu";
getch();
}
void displayMatriceaIncidenta()
{
system("cls");
if (matriceIncidentaLungime < 1)
cout << "Va rugam sa introduceti o matrice de incidenta" << endl;
else
{
int i, j;
cout << "Matricea de incidenta:" << endl;
for (i = 1; i <= matriceIncidentaArcs; i++)
{
for (j = 1; j <= matriceIncidentaLungime; j++)
cout << matriceIncidenta[i][j] << " ";
cout << endl;
}
}
cout << endl
<< "Tastati oricare buton pentru revenirea la meniu";
getch();
}
void displayListAdiacentaiacenta()
{
system("cls");
if (ListAdiacentaiacentaLungime < 1)
cout << "Va rugam sa introduceti o lista de adiacenta" << endl;
else
{
cout << "Lista de adiacenta:" << endl;
for (i = 0; i < ListAdiacentaiacentaLungime; i++)
{
cout << i + 1 << " - ";
j = 0;
while (ListAdiacentaiacenta[i][j] != 0)
{
cout << ListAdiacentaiacenta[i][j] << " ";
j++;
}
cout << "0" << endl;
}
cout << endl << "Apasa orice pentru a merge la meniul principal";
getch();
}
}
void StergereArc(){
int i,x,y,j,m;
virfmatrice=0;
matriceIncidentaArcs=0;
return;
for (i=0;i<m;i++) {
matriceIncidentaArcs[x][y]=matriceIncidentaArcs[x+1][y+1];
virfmatrice[y][j]=virfmatrice[y+1][j+1];
}
x=x-1;
y=y-1;
i=i-1;
j=j-1;
}
void StergereVirf(){
int i,j,p,n;
matriceIncidentaArcs=0;
for (i=0;i<n;i++) {
for (j=0;j<n;j++){
matriceIncidentaArcs[j][p]=0;
matriceIncidentaArcs[i][p]=0;
matriceIncidentaArcs[p][j]=0;
}
}
}
void insertMatriceAdiacenta(int tip)
{
int i = 0,
j = 0;
if (tip == 1)
{
citireadinFisier.open("matrAd.txt", ios::in);
citireadinFisier >> matriceAdiacentaLungime;
matriceAdiacenta = new int *[matriceAdiacentaLungime + 1];
for (i = 1; i <= matriceAdiacentaLungime; i++)
{
matriceAdiacenta[i] = new int[matriceAdiacentaLungime];
for (j = 1; j <= matriceAdiacentaLungime; j++)
{
citireadinFisier >> matriceAdiacenta[i][j];
}
}
citireadinFisier.close();
displayMtrAdiacenta();
}
else
{
cout<<"Lungimea: ";
cin >> matriceAdiacentaLungime;
matriceAdiacenta = new int *[matriceAdiacentaLungime + 1];
for (i = 1; i <= matriceAdiacentaLungime; i++)
{
matriceAdiacenta[i] = new int[matriceAdiacentaLungime];
for (j = 1; j <= matriceAdiacentaLungime; j++)
{
cin >> matriceAdiacenta[i][j];
}
}
displayMtrAdiacenta();
}
}
void insertMatriceIncidenta(int tip)
{
int i = 0,
j = 0;
if (tip == 1)
{
citireadinFisier.open("matrInc.txt", ios::in);
citireadinFisier >> matriceIncidentaLungime >> matriceIncidentaArcs;
matriceIncidenta = new int *[matriceIncidentaArcs];
for (i = 1; i <= matriceIncidentaArcs; i++)
{
matriceIncidenta[i] = new int[matriceIncidentaLungime];
for (j = 1; j <= matriceIncidentaLungime; j++)
citireadinFisier >> matriceIncidenta[i][j];
}
citireadinFisier.close();
displayMatriceaIncidenta();
}
else
{
cout << endl<< "Apasa orice pentru a merge la meniul principal";
getch();
}
}
void insertListAdiacenta(int tip)
{
int i = 0,
j = 0;
if (tip == 1)
{
citireadinFisier.open("LstInc.txt", ios::in);
citireadinFisier >> ListAdiacentaiacentaLungime;
ListAdiacentaiacenta = new int *[ListAdiacentaiacentaLungime];
while (!citireadinFisier.eof())
{
ListAdiacentaiacenta[i] = new int[ListAdiacentaiacentaLungime];
j = 0;
do
{
citireadinFisier >> ListAdiacentaiacenta[i][j];
j++;
}
while (ListAdiacentaiacenta[i][j - 1] != 0);
i++;
}
citireadinFisier.close();
displayListAdiacentaiacenta();
}
else
{
cout << "Lungimea: ";
cin >> ListAdiacentaiacentaLungime;
ListAdiacentaiacenta = new int *[ListAdiacentaiacentaLungime];
for (i = 0; i < ListAdiacentaiacentaLungime; i++)
{
ListAdiacentaiacenta[i] = new int[ListAdiacentaiacentaLungime];
j = 0;
cout << i << " - ";
do
{
cin >> ListAdiacentaiacenta[i][j];
if (ListAdiacentaiacenta[i][j] <= ListAdiacentaiacentaLungime)
j++;
} while (ListAdiacentaiacenta[i][j] != 0);
}
citireadinFisier.close();
}
}
void matriceAdiacenta_ListAdiacenta()
{
system("cls");
if (matriceAdiacentaLungime == 0)
{
cout << "Va rugam sa introduceti o matrice adiacenta" << endl;
}
else
{
int i, j;
for (i = 1; i <= matriceAdiacentaLungime; i++)
{
cout << i << " - ";
for (j = 1; j <= matriceAdiacentaLungime; j++)
{
if (matriceAdiacenta[i][j] == 1)
{
cout << j << " ";
}
}
cout << "0" << endl;
}
}
cout << endl<< "Apasa orice pentru a merge la meniul principal";
getch();
}
void matriceAdiacenta_MatriceIncident()
{
system("cls");
if (matriceAdiacentaLungime == 0)
{
cout << "Va rugam sa introduceti o matrice adiacenta" << endl;
}
else
{
int arcs = 0, i, j, currArc = 1, **matr;
for (i = 1; i <= matriceAdiacentaLungime; i++)
for (j = 1; j <= matriceAdiacentaLungime; j++)
if (matriceAdiacenta[i][j] == 1)
arcs++;
matr = new int *[arcs];
for (i = 1; i <= arcs; i++)
{
matr[i] = new int[matriceAdiacentaLungime];
for (j = 1; j <= matriceAdiacentaLungime; j++)
matr[i][j] = 0;
}
for (i = 1; i <= matriceAdiacentaLungime; i++)
for (j = 1; j <= matriceAdiacentaLungime; j++)
if (matriceAdiacenta[i][j] == 1)
{
matr[currArc][i] = -1;
matr[currArc][j] = 1;
currArc++;
}
for (i = 1; i <= arcs; i++)
{
for (j = 1; j <= matriceAdiacentaLungime; j++)
cout << matr[i][j] << " ";
cout << endl;
}
}
cout << endl
<< "Apasa orice pentru a merge la meniul principal";
getch();
}
void matriceIncidenta_matriceAdiacenta()
{
system("cls");
if (matriceIncidentaLungime == 0)
{
cout << "Va rugam sa introduceti o matrice de incidenta" << endl;
}
else
{
int **matr, matr_out, matr_in, i, j;
matr = new int *[matriceIncidentaLungime];
for (i = 1; i <= matriceIncidentaLungime; i++)
{
matr[i] = new int[matriceIncidentaLungime];
for (j = 1; j <= matriceIncidentaLungime; j++)
matr[i][j] = 0;
}
for (i = 1; i <= matriceIncidentaArcs; i++)
{
for (j = 1; j <= matriceIncidentaLungime; j++)
if (matriceIncidenta[i][j] == -1)
matr_out = j;
else if (matriceIncidenta[i][j] == 1)
matr_in = j;
matr[matr_out][matr_in] = 1;
}
//afisare
for (i = 1; i <= matriceIncidentaLungime; i++)
{
for (j = 1; j <= matriceIncidentaLungime; j++)
cout << matr[i][j] << " ";
cout << endl;
}
}
cout << endl<< "Apasa orice pentru a merge la meniul principal";
getch();
}
void matriceIncidenta_ListAdiacenta()
{
system("cls");
if (matriceIncidentaLungime == 0)
{
cout << "Va rugam sa introduceti o matrice de incidenta" << endl;
}
else
{
int i, j, k;
for (j = 1; j <= matriceIncidentaLungime; j++)
{
cout << j << " - ";
for (i = 1; i <= matriceIncidentaArcs; i++)
if (matriceIncidenta[i][j] == -1)
for (k = 1; k <= matriceIncidentaLungime; k++)
if (matriceIncidenta[i][k] == 1)
{
cout << k << " ";
break;
}
cout << "0" << endl;
}
}
cout << endl<< "Apasa orice pentru a merge la meniul principal";
getch();
}
void ListAdiacenta_matriceIncidenta()
{
system("cls");
if (ListAdiacentaiacentaLungime == 0)
{
cout << "Va rugam sa introduceti o matrice adiacenta" << endl;
}
else
{
int k = 0, i, j, **matr;
for (i = 0; i < ListAdiacentaiacentaLungime; i++)
{
j = 0;
while (ListAdiacentaiacenta[i][j] != 0)
{
k++;
j++;
};
}
matr = new int *[k];
for (i = 1; i <= k; i++)
{
matr[i] = new int[ListAdiacentaiacentaLungime];
for (j = 1; j <= ListAdiacentaiacentaLungime; j++)
{
matr[i][j] = 0;
}
}
k = 1;
for (i = 0; i < ListAdiacentaiacentaLungime; i++)
{
j = 0;
while (ListAdiacentaiacenta[i][j] != 0)
{
matr[k][i + 1] = -1;
matr[k][ListAdiacentaiacenta[i][j]] = 1;
k++;
j++;
};
}
for (i = 1; i <= k - 1; i++)
{
for (j = 1; j <= ListAdiacentaiacentaLungime; j++)
cout << matr[i][j] << " ";
cout << endl;
}
}
cout << endl<< "Apasa orice pentru a merge la meniul principal";
getch();
}
void ListAdiacenta_matriceAdiacenta()
{
system("cls");
if (ListAdiacentaiacentaLungime == 0)
{
cout << "Va rugam sa introduceti o lista de adiacenta" << endl;
}
else
{
int **matr, i, j;
matr = new int *[ListAdiacentaiacentaLungime];
for (i = 1; i <= ListAdiacentaiacentaLungime; i++)
{
matr[i] = new int[ListAdiacentaiacentaLungime];
for (j = 1; j <= ListAdiacentaiacentaLungime; j++)
matr[i][j] = 0;
}
for (i = 0; i < ListAdiacentaiacentaLungime; i++)
{
j = 0;
while (ListAdiacentaiacenta[i][j] != 0)
{
matr[i + 1][ListAdiacentaiacenta[i][j]] = 1;
j++;
};
}
for (i = 1; i <= ListAdiacentaiacentaLungime; i++)
{
for (j = 1; j <= ListAdiacentaiacentaLungime; j++)
cout << matr[i][j] << " ";
cout << endl;
}
}
cout << endl<< "Apasa orice pentru a merge la meniul principal";
getch();
}
int main()
{
bool stop = false;
while (!stop)
{
cout << "1 - Introduceti un graf" << endl;
cout << "2 - Afisarea grafului" << endl;
cout << "3 - Afisati alt tip prin schimbarea celui existent" << endl;
cout << "4 - Stergere" << endl;
cout << "5 - Iesire" << endl;
cin >> meniu;
if (meniu == 1)
{
system("cls");
cout << "1 - Matrice de adiacenta" << endl;
cout << "2 - Matrice de incidenta" << endl;
cout << "3 - Lista de adiacenta" << endl;
cin >> meniu;
system("cls");
cout << "1 - Din fisier" << endl;
cout << "2 - De la tastatura" << endl;
cin >> tipcitireMeniu;
if (meniu == 1)
insertMatriceAdiacenta(tipcitireMeniu);
else if (meniu == 2)
insertMatriceIncidenta(tipcitireMeniu);
else if (meniu == 3)
insertListAdiacenta(tipcitireMeniu);
system("cls");
}
else if (meniu == 2)
{
system("cls");
cout << "1 - Matrice de adiacenta" << endl;
cout << "2 - Matrice de incidenta" << endl;
cout << "3 - Lista de adiacenta" << endl;
cout << "next ";
cin >> meniu;
if (meniu == 1)
displayMtrAdiacenta();
if (meniu == 2)
displayMatriceaIncidenta();
if (meniu == 3)
displayListAdiacentaiacenta();
system("cls");
}
else if (meniu == 3)
{
system("cls");
cout << "1 - Matrice Adiacenta -> Lista Adiacenta" << endl;
cout << "2 - Matrice Adiacenta -> Matrice Incidenta" << endl;
cout << "3 - Matrice Incidenta -> Matrice Adiacenta" << endl;
cout << "4 - Matrice Incidenta -> Lista Adiacenta" << endl;
cout << "5 - Lista Adiacenta -> Matrice Incidenta" << endl;
cout << "6 - Lista Adiacenta -> Matrice Adiacenta" << endl;
cin >> meniu;
switch (meniu)
{
case 1:
matriceAdiacenta_ListAdiacenta();
break;
case 2:
matriceAdiacenta_MatriceIncident();
break;
case 3:
matriceIncidenta_matriceAdiacenta();
break;
case 4:
matriceIncidenta_ListAdiacenta();
break;
case 5:
ListAdiacenta_matriceIncidenta();
break;
case 6:
ListAdiacenta_matriceAdiacenta();
break;
default:
break;
}
system("cls");
}
else if (meniu == 4)
{
cout << "1 - Stergerea arcului" << endl;
cout << "2 - Stergerea virfului" << endl;
cin >> meniu;
switch (meniu)
{
case 1:
StergereArc();
break;
case 2:
StergereVirf();
break;
default:
break;
}
system("cls");}
else
{
stop = true;
}
}
return 0;
}

【问题讨论】:

  • 最小化你的例子。见minimal reproducible example
  • 这是一个最小化的例子。D
  • 您阅读了链接吗?您声称没有一行可以从那堵代码中删除并得到相同的错误?这不是最小的。
  • 删除cout &lt;&lt; endl &lt;&lt; "Tastati oricare buton pentru revenirea la meniu"; getch();,错误依然存在。因此,您的示例并不是最小的。所以,去最小化它。每一行,看看删除它是否保持错误完好无损。当每条语句在删除时都会更改错误时,您的示例将变得更小。发布该代码。
  • 您的代码非常混乱,您根本不缩进。

标签: c++ arrays pointers matrix visual-studio-code


【解决方案1】:

您的代码有多个问题,但您要问的是:

在顶部的声明中,您有:

int matriceIncidentaLungime = 0,
matriceIncidentaArcs = 0;

这声明了两个不同的整数,并将两者都初始化为零。使用逗号在一行上声明多个变量是合法的,但您应该立即停止这样做 - 这是一种真正的代码气味。相反,你应该写:

int matriceIncidentaLungime = 0;
int matriceIncidentaArcs = 0;

但真正的错误是,您使用的是 matriceIncidentaArcs,因为它被声明为二维数组,而不是普通的 int:

matriceIncidentaArcs[x][y]=matriceIncidentaArcs[x+1][y+1];

为此,matriceIncidentaArcs 需要是一个二维数组(最好是矢量,而不是 int[][]。

但这只是代码中的众多问题之一。

你声明的指针和双指针,当你运行它时会爆炸你的代码的错误尖叫。在你知道你在做什么之前不要使用指针。相反,开始学习 std::vector 或 std::array

通过这样做,您将能够使用基于范围的 for 循环,而不是您也误用的原始 for 循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2015-09-26
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多