c ++不存在从“myClass1”到“myClass1”的合适的用户定义转换

Posted

技术标签:

【中文标题】c ++不存在从“myClass1”到“myClass1”的合适的用户定义转换【英文标题】:c++ no suitable user-defined conversion from "myClass1" to "myClass1" exists 【发布时间】:2011-10-02 23:54:48 【问题描述】:

我对 c++ 非常陌生,当 Visual Studio 2010 突出显示此语法错误时,我真的很困惑。 定义

class myClass1 
    public: 
        myClass1();

class myClass2 
    public:
        myClass2();
        void doSomething(myClass1 thing) ;


int main(int argc, char* argv[]) 
    vector<myClass1> arr;
    arr.resize(1);
    arr[0] = myClass1();
    myClass2 c2 = myClass2();
    c2.doSomething(arr[0]); //this line is being highlighted as giving the error in the title
;

我真的很困惑这意味着什么。

语法错误在我评论的那一行,它给出了错误“没有合适的用户定义从“myClass1”到“myClass1”的转换。

编辑:抱歉没有把问题说清楚

【问题讨论】:

发布显示问题的整个(可编译)示例,并显示编译器给出的错误。虽然您正在做一些“非常规”的事情,但发布的代码看起来没有问题,事实上,修复了明显的编译问题(在类定义之后没有;,没有声明函数的定义),按预期编译。 -1 “此行被突出显示为在标题中给出错误”是错误的。标题谈到myClass。另一方面,代码有myClass1myClass2,但没有myClass 【参考方案1】:

myClass* 类不包含任何内容/不执行任何操作,因此很难理解您的目的。 您的代码将无法编译,因为未定义构造函数。 您应该始终在代码粘贴中提供最少的相关信息(而不是更多)。

要在堆栈上声明 myClass2 对象的实例,只需执行以下操作:

myClass2 c2;

doSomething 方法使用 myClass1 的副本,这可能不是您想要的。 未定义复制构造函数(但没有要复制的内容)。 加上函数什么都不做......

【讨论】:

啊,没错,您只是没有定义复制构造函数。你应该使用void doSomething(myClass1 &amp; thing); @cJZougloub 您不必在 C++ 中定义复制构造函数 - 如果您不定义,编译器会给您一个浅复制构造函数作为礼物。 @IdanArye:默认的复制构造函数并不总是浅的。 @BenVoigt True - 如果有成员字段的复制构造函数,它会调用它们。

以上是关于c ++不存在从“myClass1”到“myClass1”的合适的用户定义转换的主要内容,如果未能解决你的问题,请参考以下文章

VS2017中遇到不存在从string到const char*的转换函数的解决方法

c语言:IntelliSense: 不存在从 "int" 转换到 "linklist" 的适当构造函数 计算链表节点的程序

iOS4上的C语言毫秒睡眠

如果该文件夹不存在,如何通过创建文件夹将文件从一个目录复制到另一个目录

从入门到自闭之--网络编程

C ++中具有负索引的类似数组的数据结构