草庐IT

implicit-conversion

全部标签

c++ - 注意 : 'person::person()' is implicitly deleted because the default definition would be ill-formed

我正在开发一个示例程序来帮助我学习C++中的结构。这是我的代码:#include#include#includeusingnamespacestd;intnextPersonID=0;intnextAddressID=0;structdate{intday;intmonth;intyear;};structaddress{intid;stringaddress;dateeffectiveDate;dateexpirationDate;};structperson{intid;stringname;datebirthdate;constintnumberOfAddresses;addre

c++ - 为什么这个函数调用不明确?

我正在阅读标准并试图弄清楚为什么没有强制转换就无法解析这段代码。voidfoo(charc){}//Waybiggerthancharvoidfoo(unsignedlongint){}intmain(){foo(123456789);//ambiguousfoo((unsignedlongint)123456789);//works}它是这样说的:4.13Integerconversionrank[conv.rank]Everyintegertypehasanintegerconversionrankdefinedasfollows:—Therankofanyunsignedinte

c++ - 为什么这个函数调用不明确?

我正在阅读标准并试图弄清楚为什么没有强制转换就无法解析这段代码。voidfoo(charc){}//Waybiggerthancharvoidfoo(unsignedlongint){}intmain(){foo(123456789);//ambiguousfoo((unsignedlongint)123456789);//works}它是这样说的:4.13Integerconversionrank[conv.rank]Everyintegertypehasanintegerconversionrankdefinedasfollows:—Therankofanyunsignedinte

c++ - 如何解决编译器警告 'implicit declaration of function memset'

我的c代码使用“memset”和“close”。我已经添加:#include#include#include但我仍然收到这些警告:main.c:259:warning:implicitdeclarationoffunction‘memset’main.c:259:warning:incompatibleimplicitdeclarationofbuilt-infunction‘memset’main.c:268:warning:implicitdeclarationoffunction‘close’main.c:259:warning:incompatibleimplicitdecla

c++ - 如何解决编译器警告 'implicit declaration of function memset'

我的c代码使用“memset”和“close”。我已经添加:#include#include#include但我仍然收到这些警告:main.c:259:warning:implicitdeclarationoffunction‘memset’main.c:259:warning:incompatibleimplicitdeclarationofbuilt-infunction‘memset’main.c:268:warning:implicitdeclarationoffunction‘close’main.c:259:warning:incompatibleimplicitdecla

c++ - 关于c++转换: no known conversion for argument 1 from ‘[some_class]' to ‘[some_class]&’

我正在使用C++,但出现了一个我不知道确切原因的错误。我找到了解决方案,但仍然想知道为什么。classBase{public:voidsomething(Base&b){}};intmain(){Baseb;b.something(Base());return0;}当我编译代码时,出现以下错误:abc.cpp:12:20:error:nomatchingfunctionforcallto‘Base::something(Base)’abc.cpp:12:20:note:candidateis:abc.cpp:6:7:note:voidBase::something(Base&)abc.

c++ - 关于c++转换: no known conversion for argument 1 from ‘[some_class]' to ‘[some_class]&’

我正在使用C++,但出现了一个我不知道确切原因的错误。我找到了解决方案,但仍然想知道为什么。classBase{public:voidsomething(Base&b){}};intmain(){Baseb;b.something(Base());return0;}当我编译代码时,出现以下错误:abc.cpp:12:20:error:nomatchingfunctionforcallto‘Base::something(Base)’abc.cpp:12:20:note:candidateis:abc.cpp:6:7:note:voidBase::something(Base&)abc.

c++ - 三元运算符隐式转换为基类

考虑这段代码:structBase{intx;};structBar:Base{inty;};structFoo:Base{intz;};Bar*bar=newBar;Foo*foo=newFoo;Base*returnBase(){Base*obj=!bar?foo:bar;returnobj;}intmain(){returnBase();return0;}这在Clang或GCC下不起作用,给我:error:conditionalexpressionbetweendistinctpointertypes‘Foo*’and‘Bar*’lacksacastBase*obj=!bar?f

c++ - 三元运算符隐式转换为基类

考虑这段代码:structBase{intx;};structBar:Base{inty;};structFoo:Base{intz;};Bar*bar=newBar;Foo*foo=newFoo;Base*returnBase(){Base*obj=!bar?foo:bar;returnobj;}intmain(){returnBase();return0;}这在Clang或GCC下不起作用,给我:error:conditionalexpressionbetweendistinctpointertypes‘Foo*’and‘Bar*’lacksacastBase*obj=!bar?f

c++ - 你可以使用关键字显式来防止方法参数的自动转换吗?

我知道您可以对类的构造函数使用C++关键字“显式”来防止类型的自动转换。你能用同样的命令来防止类方法的参数转换吗?我有两个类(class)成员,一个以bool作为参数,另一个是unsignedint。当我用int调用函数时,编译器将param转换为bool并调用了错误的方法。我知道最终我会替换bool,但现在不想在开发这个新例程时破坏其他例程。 最佳答案 不,您不能使用显式,但您可以使用模板函数来捕获不正确的参数类型。使用C++11,您可以将模板化函数声明为deleted。这是一个简单的例子:#includestructThing{