现在有两个类:
类  A :public Dialog添加了   CListCtrl m_SubStatic  成员变量,可以显示数据
类  B 是我的一些数据处理
里边有一个函数void   DisplayResult(CListCtrl m_ListCtrl);我在类A中直接调用上边的函数,
B b;
b.DisplayResult(m_SubStatic);
提示如下错误,如何解决:
error C2664: 'DisplayResult' : cannot convert parameter 1 from 'class CListCtrl' to 'class CListCtrl'
        No copy constructor available for class 'CListCtrl'

解决方案 »

  1.   

    某参数无法转换为所需类型。如果创建某个类的实例,然后试图对用 explicit 关键字标记的构造函数进行隐式转换,则可能发生此错误。如果将临时对象传递给采用指向对象的引用作为参数的函数,则该引用必须是常数引用。如果使用不是函数所预期的类型的参数调用该函数,则使用适当的构造函数创建临时对象。然后将该临时对象传递给函数。在这种情况下,该临时对象用于初始化引用。在该语言的早期版本中,所有的引用都可以由临时对象进行初始化。此行为现在已被逐步淘汰,因此 Microsoft C/C++ 编译器给出该错误。下面的代码通过调用带有字符串的 Test 演示此错误。因为该参数是 szString 引用,所以必须使用适当的构造函数创建对象。结果是一个无法用于初始化该引用的临时对象。
      

  2.   

    比如这样做都会出错的#include <iostream.h>
    #include <string.h>class szString
    {
       int slen;
       char *str;public:
       szString(const char *);
       int len() const { return slen; }
    };void Test(szString &a) { cout << a.len();}szString::szString(const char * newstr)
    {
       slen=strlen(newstr);
       str = new char[slen + 1];
       strcpy(str, newstr);
    }int main()
    {
       Test("hello");   //erre
    }
      

  3.   

    你改成
    void   DisplayResult(CListCtrl *m_ListCtrl);
    试试
      

  4.   

    类CListCtrl没有拷贝构造函数,你的函数这样修改就行了void   DisplayResult(CListCtrl& m_ListCtrl);使用楼上的方法也可以,指针和引用都可以。