这是完整的错误消息:
错误:无法将'MyTime'转换为'const MyTime *'以将参数'1'转换为'int DetermineElapsedTime(const MyTime *,const MyTime *)'|
这是我的代码:
#include <iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
struct MyTime { int hours, minutes, seconds; };
int DetermineElapsedTime(const MyTime *t1, const MyTime *t2);
const int hourSeconds = 3600;
const int minSeconds = 60;
int DetermineElapsedTime(const MyTime *t1, const MyTime *t2)
{
long timeDiff = ((((t2->hours * hourSeconds) + (t2->minutes * minSeconds) + t2->seconds) -
((t1->hours * hourSeconds) + (t1->minutes * minSeconds) + t1->seconds)));
return(timeDiff);
}
int main(void)
{
char delim1, delim2;
MyTime tm, tm2;
cout << "Input two formats for the time. Separate each with a space. Ex: hr:min:sec\n";
cin >> tm.hours >> delim1 >> tm.minutes >> delim2 >> tm.seconds;
cin >> tm2.hours >> delim1 >> tm2.minutes >> delim2 >> tm2.seconds;
DetermineElapsedTime(tm, tm2);
return 0;
}
有什么办法可以解决吗?请随时指出您看到的任何其他错误。我知道修复DetermineTimeElapsed以正确输出hr:min:sec格式。但是现在我需要通过这个。
答案 0 :(得分:7)
错误应位于以下行:
DetermineElapsedTime(tm, tm2);
您希望MyTime
时将const MyTime*
个对象传递给上述函数。
通过传递对象地址来修复它:
DetermineElapsedTime(&tm, &tm2);
或更好的C ++方式:通过更改函数原型来接受对象引用:
int DetermineElapsedTime(const MyTime &t1, const MyTime &t2);
身体也会相应改变;例如->
将被.
运算符替换,等等。
答案 1 :(得分:2)
该函数期望指向2个变量,但是你自己传递变量,这就是问题所在。您可以通过使用&
运算符传递其内存地址来传递指向变量的指针来解决此问题,如下所示
DetermineElapsedTime(&tm, &tm2);
或者您可以更改函数以接收@iammilind建议的变量引用,这意味着您可以保留上面的行。这将是一种更安全,更清洁的“C ++”方式。
答案 2 :(得分:1)
您的函数DetermineElapsedTime
需要指向MyTime
。
将您的代码更改为:
DetermineElapsedTime(&tm, &tm2);
此上下文中的&
运算符表示“获取地址”
答案 3 :(得分:1)
你的功能需要两个常量指针:
int DetermineElapsedTime(const MyTime *t1, const MyTime *t2)
\_____one______/ \______two_____/
现在,这就是你如何称呼它:
MyTime tm, tm2;
DetermineElapsedTime(tm, tm2);
如您所见,您正在按值传递变量,而不是像函数所期望的那样通过指针传递它们。您可以通过以下几种方式解决问题:
更改函数以期望const引用:
int DetermineElapsedTime(const MyTime &t1, const MyTime &t2)
获取传递的变量的地址:
MyTime tm, tm2;
DetermineElapsedTime(&tm, &tm2);
动态分配内容并传递指针:
MyTime *tm = new MyTime();
MyTime *tm2 = new MyTime();
DetermineElapsedTime(tm, tm2);