注册 登录
编程论坛 C++教室

将结构执政传递给函数,编译出现错误

ClarenceC 发布于 2014-10-04 16:06, 450 次点击
#include <iostream>
using namespace std;
struct travel_time
{
    int hours;
    int mins;
};
const int MINS_PER_HOUR = 60;
travel_time sum(travel_time, travel_time);
void show_time(travel_time);
int main()
{
    //两天旅游分别所用的时间
    travel_time day1 = { 4, 54 };
    travel_time day2 = { 3, 51 };
    travel_time *p1 = &day1;
    travel_time *p2 = &day2;
    //将两天时间求和
    travel_time day1_day2_total = sum(p1, p2);
    travel_time *p = &day1_day2_total;
    //输出总时间
    show_time(p);
    return 0;
}
travel_time sum(const travel_time *day1, const travel_time *day2)
{
    travel_time sum;
    sum.mins = (day1->mins + day2->mins) % MINS_PER_HOUR;
    sum.hours = (day1->hours + day2->hours) + (day1->mins + day2->mins) / MINS_PER_HOUR;
    return sum;
}
void show_time(const travel_time *total)//将结构的地址传递给函数
{
    cout << "you have used " << total->hours << " hours and " << total->mins << " minutes among this trip." << endl;//使用箭头操作符
}
   出现错误:错误    1    error C2664: “travel_time sum(travel_time,travel_time)”: 无法将参数 1 从“travel_time *”转换为“travel_time”
   请提点一下哪里没考虑好导致出现了问题。
8 回复
#2
zklhp2014-10-04 16:17
travel_time sum(travel_time, travel_time);
void show_time(travel_time);

travel_time sum(const travel_time *day1, const travel_time *day2)
void show_time(const travel_time *total)//将结构的地址传递给函数

这两个应该一致 差一点都不行
#3
zklhp2014-10-04 16:18

travel_time sum(const travel_time *, const travel_time *);
void show_time(const travel_time *);


我最开始没加const 编译不报错 链接报错了 所以必须一点不差

#4
zklhp2014-10-04 16:20
多说一句 如果这里用C++的引用 程序会简单很多
#5
ClarenceC2014-10-04 16:22
嗯,谢谢您。
#6
ClarenceC2014-10-04 16:23
回复 4 楼 zklhp
谢谢。
#7
zklhp2014-10-04 16:29
程序代码:

#include <iostream>

using std::cout;
using std::endl;

struct travel_time
{
    int hours;
    int mins;
};

const int MINS_PER_HOUR = 60;

void sum(const travel_time &, const travel_time &, travel_time &);
void show_time(const travel_time &);

int main(void)
{
    //两天旅游分别所用的时间
    travel_time day1 = {4, 54};
    travel_time day2 = {3, 51};
    travel_time day1_day2_total {0, 0};
    //将两天时间求和
    sum(day1, day2, day1_day2_total);
    //输出总时间
    show_time(day1_day2_total);

    return 0;
}

void sum(const travel_time &day1, const travel_time &day2, travel_time &total)
{
    total.mins = (day1.mins + day2.mins) % MINS_PER_HOUR;
    total.hours = (day1.hours + day2.hours) + (day1.mins + day2.mins) / MINS_PER_HOUR;
}

void show_time(const travel_time &total)
{
    cout << "you have used " << total.hours << " hours and ";
    cout << total.mins << " minutes among this trip." << endl;
}


用指针 是C语言的实现方式 用引用 是C++的实现方式 既然是C++ 就要尽量多用C++的特性
#8
stop12042014-10-04 17:58
你那个  一个是指针一个是普通的传递
#9
ClarenceC2014-10-05 16:09
谢谢
1