Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Τι βλακεία εχω κάνει για να βγάζει linker error για unresolved symbol σε αυτό

 

Obj obj(10, 20, "30");
αλλά να κάνει κανονικά compile, και να δουλεύει οπως πρέπει με

 

Obj* obj = new Obj(10, 20, "30");
Δημοσ.

Παίζει να φταίει που εχω declarations και definitions των κλασεων σε ένα .h αρχειο αντι για χωριστα

 

Όλο λεω να τα χωρίσω μετα απο ενα αλλο thread που ειχα ρωτησει γιατι ειναι καλυτερο, αλλα όλο το αφηνα γιατι ειναι πολλα τα αρχεία.

Δημοσ.

Μπορεί να παραβιάζεις το one definition rule, ή μπορεί να είναι το "most vexing parse".

 

Δώσε τον αληθινό κώδικα και όλα τα warnings/errors.

Δημοσ.

defacer ευχαριστώ, αλλα δεν νομίζω οτι ειναι αυτό, καθώς δεν μου βγάζει το σφάλμα που λεει στο άρθρο. Εμένα βγάζει "unresolved external symbol" για το Obj στο VS2010, ενώ στο g++ που δοκίμασα τωρα undefined reference to Obj

edit:
Λοιπον προσπαθωντας να σας δείξω τον ελαχιστο κωδικα που τα κανει αυτα σβηνοντας πραγματα βρήκα τι έφταιγε.

Στην κλαση Obj είχα δηλώσει τον deconstructor ~Obj(); χωρίς body. Μόλις το έσβησα, το πρόβλημα διορθώθηκε.


Μπορει κανεις να μου εξηγίσει γιατί δημιουργούσε αυτό το πρόβλημα ;

Δημοσ.

Δεν μπορείς να το καταστρέψεις το αντικείμενο αν δεν υπάρχει ο destructor. Όταν κάνεις new, προφανώς δεν κάνεις delete, οπότε δεν υπάρχει πρόβλημα. Όταν το κάνεις declare σε local scope, όταν περνάει από την ζωή του το αντικείμενο (out of scope), ο destructor δεν υπάρχει.

 

 

struct Foo {
    ~Foo();
    int bar(void) const; // gia paradigma
};

int main(void) {
    // Error 1:
    // Foo foo;
    Foo *foo = new Foo{};
    // Error 2:
    //delete foo;
    return 0;
}
  • Like 1
Δημοσ.

Στο δευτερο θα ειχες error αν καλουσες το destructor

delete obj;

 

Ναι, όπως ηταν και αναμενόμενο με βαση αυτα που μου εξηγίσατε.

 

Thanks.

Δημοσ.

Παίζει να φταίει που εχω declarations και definitions των κλασεων σε ένα .h αρχειο αντι για χωριστα

 

Όλο λεω να τα χωρίσω μετα απο ενα αλλο thread που ειχα ρωτησει γιατι ειναι καλυτερο, αλλα όλο το αφηνα γιατι ειναι πολλα τα αρχεία.

 

Οπως σου ειπα και πριν. ΧΩΡΙΣΕ ΤΑ. Θα κερδισεις χρονο εφοσον δεν θα γινονται ολα compile.

Δημοσ.

Οπως σου ειπα και πριν. ΧΩΡΙΣΕ ΤΑ. Θα κερδισεις χρονο εφοσον δεν θα γινονται ολα compile.

 

Λοιπόν τα χώρισα. Δυστυχώς έχω καμια 20αρια linker errors για unresolved symbol. Εβαλα πολυ κωδικα σε σχολια ωστε να μεινει μονο ενα τετοιο ερρορ, αλλα και παλι δεν μπορω να καταλάβω με τίποτα τι παίζει.

 

Το error ειναι αυτό:

 

 

Error 1 error LNK2001: unresolved external symbol "public: __thiscall Label<float>::~Label<float>(void)" (??1?$Label@M@@QAE@XZ) C:\Users\...\Project\Algorithm.obj Project

 

 

Η μοναδική αναφορά της κάσης Label στην Algorithm.cpp και Algorithm.h είναι στα ορίσματα μιας συνάρτησης(η οποία ειναι αδεια, λογω των σχολιων που έβαλα). Εχω κάνει include το Label.h στο Algorithm.h. Ο destructor της Label έχει τον κωδικα του στο Label.cpp. 

 

Καμια ιδεα τι μπορει να φταίει;

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...