如何修复C ++编译器错误"无法转换' Type' to' const Type *'"?

时间:2012-11-12 06:31:31

标签: c++ pointers constructor compiler-errors

这是完整的错误消息:

  

错误:无法将'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格式。但是现在我需要通过这个。

4 个答案:

答案 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);