Error:E0415 no suitable constructor exists to convert from “int“ to “Rational“

简介: Error:E0415 no suitable constructor exists to convert from “int“ to “Rational“

场景:

这个问题是因为缺少对于的构造函数或者是该构造函数被声明为explicit。

可以参考下面这个场景。

#include <iostream>
using std::cout;
using std::endl;
class Rational1
{
public:
  Rational1(int n = 0, int d = 1):num(n), den(d)
  {
    cout << __func__ << "(" << num << "/" << den << ")" << endl;
  }
public:
  int num; // 被除数
  int den; // 除数
};
class Rational2
{
public:
  explicit Rational2(int n = 0, int d = 1) :num(n), den(d)
  {
    cout << __func__ << "(" << num << "/" << den << ")" << endl;
  }
public:
  int num; // 被除数
  int den; // 除数
};
void Display1(Rational1 r)
{
  cout << __func__ << endl;
}
void Display2(Rational2 r)
{
  cout << __func__ << endl;
}
int main()
{
  Rational1 r1 = 11;
  Rational1 r2(11);
  Rational2 r3 = 11; // error E0415
  Rational2 r4(11);
  Display1(1);
  Display2(2); // error  E0415
  return 0;
}


explicit关键字

1、指定构造函数或转换函数 (C++11起)为显式, 即它不能用于隐式转换和复制初始化.

2、explicit 可以与常量表达式一同使用. 函数若且唯若该常量表达式求值为 true 才为显式. (C++20起)


问题描述

Error:E0415 no suitable constructor exists to convert from “int“ to “Rational“


解决方案:

1. 自己实现对应的构造函数。(推荐)
2. 删掉被 explicit关键字修饰的构造函数。(不推荐)


C++常见错误

fatal error C1189: #error: STL1003: Unexpected compiler, expected C++ compiler


error C2041: illegal digit ‘9‘ for base ‘8‘ | error C2059: syntax error: ‘bad suffix on number‘


Error:QSqlDatabase: QMYSQL driver not loaded (Qt+C++ 找不到mysql的驱动)


Qt5Error:msvc-version.conf loaded but QMAKE_MSC_VER ins‘t set


Error:E0415 no suitable constructor exists to convert from “int“ to “Rational“


Error:error C2601: ‘b‘ : local function definitions are illegal error C2063: ‘b‘ : not a function


目录
相关文章
|
2月前
|
TensorFlow 算法框架/工具
Tensorflow error(二):x and y must have the same dtype, got tf.float32 != tf.int32
本文讨论了TensorFlow中的一个常见错误,即在计算过程中,变量的数据类型(dtype)不一致导致的错误,并通过使用`tf.cast`函数来解决这个问题。
26 0
error C2040: ‘n‘ : ‘int [1000]‘ differs in levels of indirection from ‘int ‘
error C2040: ‘n‘ : ‘int [1000]‘ differs in levels of indirection from ‘int ‘
132 0
|
关系型数据库 MySQL C++
类型收窄 error C2397: conversion from ‘const int‘ to ‘char‘ requires a narrowing conversion
类型收窄 error C2397: conversion from ‘const int‘ to ‘char‘ requires a narrowing conversion
200 0
|
Linux Windows
编译OpenJDK8-u302出错:error C3861: “INT64_C”: 找不到标识符
编译OpenJDK8-u302出错:error C3861: “INT64_C”: 找不到标识符
130 0
解决办法:error: unknown type name ‘__int64‘
解决办法:error: unknown type name ‘__int64‘
508 0
关于 error: invalid types ‘int[int]‘ for array subscript 的解决
关于 error: invalid types ‘int[int]‘ for array subscript 的解决
1502 0
关于 error: invalid types ‘int[int]‘ for array subscript 的解决
解决办法:error LNK2005: "void * __cdecl operator new(unsigned int)" 已经在 LIBCMTD.lib(new.obj) 中定义
解决办法:error LNK2005: "void * __cdecl operator new(unsigned int)" 已经在 LIBCMTD.lib(new.obj) 中定义
282 0
解决办法:error LNK2005: &quot;void * __cdecl operator new(unsigned int)&quot; 已经在 LIBCMTD.lib(new.obj) 中定义
解决办法:error LNK2005: &quot;void * __cdecl operator new(unsigned int)&quot; 已经在 LIBCMTD.lib(new.obj) 中定义
222 0