【发布时间】:2014-11-30 08:44:15
【问题描述】:
我正在尝试将二维数组传递给 c++ 中的函数。问题是它的维度不是普遍常数。我将维度作为用户的输入,然后尝试传递数组。这是我正在做的事情:
/*
* boy.cpp
*
* Created on: 05-Oct-2014
* Author: pranjal
*/
#include<iostream>
#include<cstdlib>
using namespace std;
class Queue{
private:
int array[1000];
int front=0,rear=0;
public:
void enqueue(int data){
if(front!=(rear+1)%1000){
array[rear++]=data;
}
}
int dequeue(){
return array[front++];
}
bool isEmpty(){
if(front==rear)
return true;
else
return false;
}
};
class Graph{
public:
void input(int matrix[][],int num_h){ //this is where I am passing the matrix
int distance;
char ans;
for(int i=0;i<num_h;i++){
for(int j=0;j<num_h;j++)
matrix[i][j]=0;
}
for(int i=0;i<num_h;i++){
for(int j=i+1;j<num_h;j++){
cout<<"Is there route between houses "<<i<<" and "<<j<<": ";
cin>>ans;
if(ans=='y'){
cout<<"Enter the distance: ";
cin>>distance;
matrix[i][j]=matrix[j][i]=distance;
}
}
}
cout<<"The matrix is: \n";
for(int i=0;i<num_h;i++){
cout<<"\n";
for(int j=0;j<num_h;j++)
cout<<matrix[i][j]<<"\t";
}
}
};
int main(){
Graph g;
int num_h;
cout<<"Enter the number of houses: ";
cin>>num_h;
int matrix[num_h][num_h];
g.input(matrix,num_h); //this is where I get an error saying
// Invalid arguments ' Candidates are: void input(int (*)[],
// int) '
return 0;
}
帮助非常感谢。谢谢。
【问题讨论】:
-
您已经在使用具有
matrix的 VLA 声明的非标准扩展在main()中。如果您想在参数列表中使用相同的参数,num_h将不得不随行。 -
@WhozCraig,对不起,我没有得到你
-
@dandan78,我们可以做到这一点。但我不希望它这么复杂。我已经在研究一个图问题,我必须使用 BFS 和 Prims 算法。做你建议的事会浪费我的时间
-
@Pranjal 我的意思是调用方在声明
int matrix[num_h][num_h];时已经在使用非标准的 VLA 扩展(可能你正在使用 gcc 或类似的扩展)。您可以通过简单地将输入声明为input(int num_h, int matrix[][num_h])来继续该用法。为了符合标准,不同的非 VLA 解决方案将是有序的(例如向量的向量或简单的向量数组)。