如何修复C++编译器错误"cannot convert 'Type' to 'const Type*'"?
How to fix C++ compiler-error "cannot convert 'Type' to 'const Type*'"?
这是完整的错误消息:
错误:无法将参数"1"的"MyTime"转换为"const MyTime*"到"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:secn";
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格式。但现在我需要克服这一点。
错误应该在下面一行:
DetermineElapsedTime(tm, tm2);
当您MyTime
对象需要const MyTime*
时,您将对象传递给上述函数。
通过传递对象地址来修复它:
DetermineElapsedTime(&tm, &tm2);
或者更好的C++方法:通过更改函数原型以接受对象引用:
int DetermineElapsedTime(const MyTime &t1, const MyTime &t2);
身体也会相应地改变;例如 ->
将由.
运算符等替换。
该函数期望指向 2 个变量的指针,但您正在传递变量本身,这就是问题所在。您可以通过使用 &
运算符传递变量的内存地址来传递指向变量的指针来解决此问题,如下所示
DetermineElapsedTime(&tm, &tm2);
或者,您可以更改函数以接收对变量的引用,如@iammilind建议的那样,这意味着您可以保持上面的行不变。这将是一种更安全、更清洁、更"C++"的方式。
您的函数DetermineElapsedTime
需要指向MyTime
的指针。
将代码更改为:
DetermineElapsedTime(&tm, &tm2);
在此上下文中,&
运算符表示"获取地址"
你的函数需要采用两个常量指针:
int DetermineElapsedTime(const MyTime *t1, const MyTime *t2)
_____one______/ ______two_____/
现在,这是您如何称呼它:
MyTime tm, tm2;
DetermineElapsedTime(tm, tm2);
如您所见,您是按值传递变量,而不是像函数所期望的那样通过指针传递它们。您可以通过几种方式修复它:
将函数更改为需要常量引用:
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);
相关文章:
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- "Cannot convert Python object argument to type '<typename>'" - 使用 Cython 包装 C++ 类时出错
- 是否有用于"go to variable type definition" C++中"auto"变量的 Visual Studio 键盘快捷方式?
- 如何修复" State Error (active) E0513 a value of type "const wchar_t *" cannot be assigned to an entity o
- 索引 2D 向量时'Reference to type const..'编译错误
- "How to use long long data-type rather than pointers data-type to modify other variables ?"
- 这是什么意思:"member reference type 'Human *' is a pointer; did you mean to use '->'?"
- C++ 中数组的"expression must have pointer-to-object type"是什么?
- "conversion from void to non scalar type string"是什么意思?
- 我收到一个" conversion from ‘std::string (*)[50]’ to non-scalar type ‘std::string’ requested"错误,似乎无法修复它
- 访问基类型数组成员(Int-to-type习惯用法)
- std::variant、包装类和'conversion from ... to non-scalar type ... requested'
- "a value of type " void (exeCallback::*)(int) " cannot be assigned to an entity of type " void (*)(
- 如何修复C++编译器错误"cannot convert 'Type' to 'const Type*'"?
- 在 2D 阵列分配期间对 calloc 进行"expression must have (pointer-to) function type"
- 禁用 Clang 中的"cast from pointer to smaller type uint32_t"错误
- 错误消息"incompatible types when assigning to type ‘char[100]’ from type ‘char *’"
- 收到"void* is not a pointer-to-object type"错误,但使用 XCode 时代码完美执行
- 我很困惑为什么我的 fillDeck 函数说,"assigning to 'char *' from incompatible type 'const char *"
- 在C++,我收到一条消息"error: 'void*' is not a pointer-to-object type"