C++;数组传递参数 我是C++新手 我尝试将数组作为参数传递,但找不到解决方案。 这是我的密码: 我的标题代码 汽车总线 #ifndef autobus_H #define autobus_H #include <iostream> using namespace std; class autobus{ public : int placeautobus[2] [40]; autobus(); void affichageTicket(); int calculdesplaces(int, int); }; #endif

C++;数组传递参数 我是C++新手 我尝试将数组作为参数传递,但找不到解决方案。 这是我的密码: 我的标题代码 汽车总线 #ifndef autobus_H #define autobus_H #include <iostream> using namespace std; class autobus{ public : int placeautobus[2] [40]; autobus(); void affichageTicket(); int calculdesplaces(int, int); }; #endif,c++,arrays,C++,Arrays,我有一个错误,我尝试了很多事情。 我只想用变量调用我的函数calculdesplaces:choixautobus having array placeautobus 有人知道怎么做吗 谢谢不应该编译代码 calculdesplaces的成员函数声明 int calculdesplaces(int, int); 不支持它的定义 int autobus::calculdesplaces(int typeautobus, int *placeautobus[2][40]){ class

我有一个错误,我尝试了很多事情。 我只想用变量调用我的函数calculdesplaces:choixautobus having array placeautobus

有人知道怎么做吗


谢谢

不应该编译代码

calculdesplaces的成员函数声明

     int calculdesplaces(int, int);
不支持它的定义

int autobus::calculdesplaces(int typeautobus, int *placeautobus[2][40]){
class autobus{
  public :
         int placeautobus[2] [40] = {};
         //...
第二个参数的类型不同

对于错误消息,则该函数应按如下方式调用

choixautobus->calculdesplaces( TypeAutobus, choixautobus->placeautobus );
考虑到函数有一个bug。将1或2作为第一个参数传递给函数,并在有效索引为0和1时使用这些值作为数组的索引

此外,该函数不需要第二个参数,因为它处理数据成员

int placeautobus[2] [40];
因此,我将按照以下方式定义类和成员函数

class autobus{
  public :
         int placeautobus[2] [40];
         autobus();
         void affichageTicket();
         int calculdesplaces(int);
  };


#include <iostream>
#include "autobus.h"

autobus::autobus() : placeautobus {}
{
}

void autobus::affichageTicket()
{

}

int autobus::calculdesplaces( int typeautobus )
{
   int placenumero = 0;
   for (int place = 0; place < 40; place++)
   {
      if ( placeautobus[typeautobus - 1][place] == 0 ) 
      {
         placenumero = place+1;
         cout <<"Places : "<< placenumero <<endl;
         break;
      }
   }

    return placenumero;   
}
在这种情况下,main可以如下所示

int main()
{
   int TypeAutobus;
   autobus *choixautobus = new autobus();

   cout << "1 for smoking bus" << endl;
   cout << "2 for non-smoking bus" << endl;
   cin >> TypeAutobus;

   choixautobus->calculdesplaces( TypeAutobus );

   system("PAUSE");

   return EXIT_SUCCESS;
}
intmain()
{
int型汽车总线;
autobus*choixautobus=新的autobus();

cout你没有提到错误是什么。但我认为这就是问题所在:

函数声明中第二个参数的数据类型是什么

int计算显示(int,int)

它是:
int

calculdesplaces
函数定义中的
placeautobus[2][40]
的数据类型是什么:

int-autobus::calculdesplaces(int-typeautobus,int*placeautobus[2][40]){…}

它是:
int*

calculdesplaces
函数调用中的
placeautobus[2][40]
的数据类型是什么:

choixautobus->calculdesplaces(TypeAutobus,choixautobus->placeautobus[2][40]);

查看
class autobus{…}
,它是:
int


因此,函数声明、定义和调用中使用的数据类型不匹配。请尝试解决此问题。

在类声明中,您需要为
calculdesplaces()的第二个参数指定正确的数组指针类型。

这表明您正在传递一个指向40个
int
元素数组的指针。这正是2D数组
int-placeautobus[2][40]所指向的类型;
在使用其名称时衰减:当提到数组名称时,数组名称衰减为指向其第一个元素的指针。对于
int()[2][40]
类型的数组,这是指向第一行数组的指针(类型为
int(*)[40]

请注意,
int(*placeautobus)[40]
中的括号非常重要:数组下标运算符
[]
的优先级高于解引用运算符
*
,因此
int(*placeautobus)[40]
的含义与
int*placeautobus[40]
非常不同

我还冒昧地在方法声明中包含了变量名,这为读者提供了基本信息,即使编译器忽略了它

calculdesplaces()
的实现中,可以使用与访问任何二维数组完全相同的方式访问参数数组:

int autobus::calculdesplaces(int typeautobus, int (*placeautobus)[40]) {
    int placenumero;
    for (int place = 0; place < 40; place++) {
        if ( placeautobus[typeautobus][place] ==0) {
            placenumero = place+1;
            cout <<"Places : "<< placenumero <<endl;
        }
    }
    return placenumero;
}
calculdesplaces()
的定义没有太大变化,只是没有使用函数参数来隐藏已经可用的数组成员:

int autobus::calculdesplaces(int typeautobus) {
    int placenumero;
    for (int place = 0; place < 40; place++) {
        if ( placeautobus[typeautobus][place] ==0) {
            placenumero = place+1;
            cout <<"Places : "<< placenumero <<endl;
        }
    }
    return placenumero;
}

正如其他人已经说过的,您现在拥有的代码不应该立即编译,因为calculdesplace的声明和定义不匹配

您根本不需要传递placeautobus数组,因为它是autobus类的成员。只需从calculdesplaces中删除第二个参数,您就可以执行所需的操作

int autobus::calculdesplaces(int typeautobus){
    int placenumero;
    for (int place = 0; place < 40; place++){
       if ( placeautobus[typeautobus][place] ==0) {
        placenumero = place+1;
        cout <<"Places : "<< placenumero <<endl;
       }
    }
    return placenumero;   
}
int-autobus::calculdesplaces(int-typeautobus){
整数;
对于(int place=0;place<40;place++){
如果(placeautobus[typeautobus][place]==0){
地点编号o=地点+1;

顺便说一句,你可以简化你的构造函数:
autobus::autobus():placeautobus(){}
zero初始化数组。但是一般来说,使用可复制和可分配的类型,例如
std::array
。请永远不要在头中放using指令。在
main
中也不需要指针。
class autobus{
    public :
        autobus();
        void affichageTicket();
        int calculdesplaces(int typeautobus, int (*placeautobus)[40]);
        int placeautobus[2][40];
};
int autobus::calculdesplaces(int typeautobus, int (*placeautobus)[40]) {
    int placenumero;
    for (int place = 0; place < 40; place++) {
        if ( placeautobus[typeautobus][place] ==0) {
            placenumero = place+1;
            cout <<"Places : "<< placenumero <<endl;
        }
    }
    return placenumero;
}
int main() {
    int TypeAutobus;
    autobus *choixautobus = new autobus();
    cout << "1 for smoking bus" << endl;
    cout << "2 for non-smoking bus" << endl;
    cin >> TypeAutobus;
    choixautobus->calculdesplaces(TypeAutobus, choixautobus->placeautobus);
    system("PAUSE");
    return EXIT_SUCCESS;
}
class autobus{
    public :
        autobus();
        void affichageTicket();
        int calculdesplaces(int typeautobus);
    private:
        int placeautobus[2][40];
};
int autobus::calculdesplaces(int typeautobus) {
    int placenumero;
    for (int place = 0; place < 40; place++) {
        if ( placeautobus[typeautobus][place] ==0) {
            placenumero = place+1;
            cout <<"Places : "<< placenumero <<endl;
        }
    }
    return placenumero;
}
int main() {
    int TypeAutobus;
    autobus *choixautobus = new autobus();
    cout << "1 for smoking bus" << endl;
    cout << "2 for non-smoking bus" << endl;
    cin >> TypeAutobus;
    choixautobus->calculdesplaces(TypeAutobus);
    system("PAUSE");
    return EXIT_SUCCESS;
}
int autobus::calculdesplaces(int typeautobus){
    int placenumero;
    for (int place = 0; place < 40; place++){
       if ( placeautobus[typeautobus][place] ==0) {
        placenumero = place+1;
        cout <<"Places : "<< placenumero <<endl;
       }
    }
    return placenumero;   
}