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
我有一个错误,我尝试了很多事情。 我只想用变量调用我的函数calculdesplaces:choixautobus having array placeautobus 有人知道怎么做吗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的成员函数声明
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;
}