2017-04-12 5 views
-1

Das Folgende ist der Code, aber ich weiß nicht, wie man es debuy. Kann mir jemand helfen?Fehler ungültige Konvertierung von 'int *' zu '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 sollte entweder vom Typ int * oder return int sein. Sie haben auch keinen Kopierkonstruktor definiert. Bitte stellen Sie sicher, dass Sie Ihre Frage in Zukunft korrekt formatieren und ein minimales, vollständiges und überprüfbares Beispiel angeben. –

+0

"Ich weiß nicht, wie man es debuggt" - bitte werfen Sie einen Blick auf [Wie kleine Programme zu debuggen] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) von Eric Lippert, es ist ein * exzellenter * Artikel über Debugging-Techniken. – EJoshuaS

Antwort

1

Diese Methode hat die falsche Signatur

int GetX() 
{ 
    return x; 
} 

es

int* GetX() 
{ 
    return x; 
} 

Soweit Ihre Aufgabe sein sollte, müssen Sie einen Kopie Zuweisungsoperator zu sagen ob3 = ob1, die wie folgt aussehen würden

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

das ist wahr und doch erklärt es nicht die Behauptung des OP, dass das Problem mit der Zuweisungslinie ist. eigentlich ist es nicht ihr Anspruch, es ist der Anspruch desjenigen, der den Code geschrieben hat, den das OP falsch kopiert hat, tut mir leid. Also hast du recht. – davidbak

+0

Wäre hilfreich zu erklären, wie die Fehlermeldung genau das sagt. – Caleth

+0

danke für deine Hilfe ~ ^^ – sue

Verwandte Themen