2017-04-12 23 views
-1

以下はコードですが、どのようにデバッグするのか分かりません。誰か助けてくれますか?'int *'から 'int'への無効な変換がエラーです。-fpermissive

enter image description here

#include <iostream> 

using namespace std; 




class CSample 
{ 



    int *x; 
    int N; 



public: 



    //dafualt constructor 
    CSample(): x(NULL) 
    {}   
    void AllocateX(int N) 
    { 
     this->N = N; 
     x = new int[this->N]; 
    } 
    int GetX() 
    { 
     return x; 
    } 
    ~CSample() 
    { 
     delete []x; 
    } 
}; 

int main() 
{ 
    CSample ob1; //Default constructor is called. 
    ob1.AllocateX(10); 

    //problem with this line 
    CSample ob2 = ob1; //default copy constructor called. 

    CSample ob3; //Default constructor called. 

    //problem with this line 
    ob3 = ob1; //default overloaded = operator function called. 
} 
+0

GetXはint *型かint型のいずれかでなければなりません。コピーコンストラクタも定義されていません。今後、適切に質問の書式を設定し、最小限で完全で検証可能な例を提供してください。 –

+0

"デバッグ方法はわかりません" - [小さなプログラムのデバッグ方法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)をご覧ください。 )Eric Lippertによると、デバッグ技術に関する素晴らしい記事です。 – EJoshuaS

答えて

1

この方法は、それは限り、あなたの割り当てなど

int* GetX() 
{ 
    return x; 
} 

でなければなりません

int GetX() 
{ 
    return x; 
} 

間違った署名を持っている、あなたはコピー代入演算子を必要とするだろう言い換えれば、ob3 = ob1のようになります

CSample& operator=(CSample& other) 
{ 
    N = other.N; 
    x = new int[N]; 
    std::copy(other.x, other.x + other.N, x); 
    return *this; 
} 
+0

それは本当ですが、問題が割り当て行にあるというOPの主張については説明していません。実際には、それは彼女の主張ではない、それはOPが間違ってコピーされたコードを書いた人の主張です、ごめんなさい。実際には、あなたは正しいのです。 – davidbak

+0

エラーメッセージが正確にどのようにこのことを説明するのに役立つでしょうか。 – Caleth

+0

あなたの助けてくれてありがとう〜^^ – sue

関連する問題