georginos1989 Δημοσ. 10 Απριλίου 2011 Share Δημοσ. 10 Απριλίου 2011 Κανω ενα απλό προγραμματακι με vectors για να τα δοκιμάσω και μια κλαση που περιέχει 2 Strings.. Στην Borland 6 τρεχει μια χαρά ενω στην Embarcadero πεταει Linker error του τυπου [iLINK32 Error] Error: Unresolved external '__fastcall Strhlpr::UnicodeFree(System::UnicodeString&)' referenced from C:\PROGRAM FILES\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLE.LIB|ustring [iLINK32 Error] Error: Unresolved external '__fastcall Strhlpr::UnicodeFromPChar(System::UnicodeString&, char *)' referenced from C:\PROGRAM FILES\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLE.LIB|ustring [iLINK32 Error] Error: Unresolved external '__fastcall System::UniqueString(System::AnsiStringT<0>&)' referenced from C:\PROGRAM FILES\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLE.LIB|ustring [iLINK32 Error] Error: Unresolved external '__fastcall Strhlpr::UnicodeFromAnsi(System::UnicodeString&, System::AnsiStringT<65535>&)' referenced from C:\PROGRAM FILES\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLE.LIB|ustring [iLINK32 Error] Error: Unresolved external '__fastcall Strhlpr::UnicodeAssign(System::UnicodeString&, System::UnicodeString&)' referenced from C:\PROGRAM FILES\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLE.LIB|ustring Το προγραμμα ειναι το παρακατω #include<stdio.h> #include<conio.h> #include "Unit1.h" #include<string.h> #include <algorithm> #include <numeric> #include<vcl.h> #include<iostream.h> #include<vector.h> //using namespace std; main() { User u1("Geiorgos","11"),u2("Giannis","53"); vector<User> user; user.push_back(u1); user.push_back(u2); printf("%s %s", user[0]); printf("%s %s", user[1]); getch(); } Η κλαση User περιεχει 2 stirngs Μονο contructos kai set/get Τι παίζει? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 10 Απριλίου 2011 Share Δημοσ. 10 Απριλίου 2011 Θα πρέπει να ελέγξεις αν η class που χρησιμοποιείς καλεί οποιαδήποτε ρουτίνα της VCL (πχ. AnsiString -ο κώδικας του User class μου είναι άγνωστος) και αν ναι τότε θα πρέπει να δημιουργήσεις ένα νέο "Console project" με μαρκαρισμένη την επιλογή Use VCL στο "New Console Application" wizard. Συνήθως αυτό βοηθά στην επίλυση τέτοιων προβλημάτων. Αυτά σε C++ Builder 2009 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
georginos1989 Δημοσ. 10 Απριλίου 2011 Μέλος Share Δημοσ. 10 Απριλίου 2011 #ifndef Unit1H #define Unit1H #include<String.h> #include<vcl.h> //--------------------------------------------------------------------------- class User { private: String s1; String s2; public: User() {}; User(String s1_, String s2_) { s1=s1_; s2=s2_; } void setS1(String s1_) { s1=s1_; } void setS2(String s2_) { s1=s2_; } String getS1() { return s1; } String getS2() { return s2; } }; #endif Να και ο κωδικας της User. Εγώ πάντα ξετικαρω το vcl και αν χρειαστει το κανω include οπως και εδω.. Θα δοκιμασω και αυτο που λες Αν και νομιζω ειναι το ιδιο.... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 10 Απριλίου 2011 Share Δημοσ. 10 Απριλίου 2011 Αφού δηλώνεις χρήση της VCL εδώ: #include<vcl.h> Θα πρέπει είτε να αφαιρέσεις το #include ή να κάνεις tick το "Use VCL". Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
georginos1989 Δημοσ. 10 Απριλίου 2011 Μέλος Share Δημοσ. 10 Απριλίου 2011 Απο που να αφαιρεσω το Include? απο τη main? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 10 Απριλίου 2011 Share Δημοσ. 10 Απριλίου 2011 Απο που να αφαιρεσω το Include? απο τη main? Από αυτό: > #ifndef Unit1H #define Unit1H #include<String.h> #include<vcl.h> // Αυτό εκτός! //--------------------------------------------------------------------------- class User { private: String s1; String s2; public: User() {}; User(String s1_, String s2_) { s1=s1_; s2=s2_; } void setS1(String s1_) { s1=s1_; } void setS2(String s2_) { s1=s2_; } String getS1() { return s1; } String getS2() { return s2; } }; #endif Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
georginos1989 Δημοσ. 10 Απριλίου 2011 Μέλος Share Δημοσ. 10 Απριλίου 2011 Βγαζει σφάλματα μετά... το εχω δοκιμάσει.... σε console application χωρις tickarismeno to vcl Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 10 Απριλίου 2011 Share Δημοσ. 10 Απριλίου 2011 Λοιπόν, καταρχήν αφαίρεσε όλα τα VCL.H #include σου και ύστερα αντικατέστησε το String σε string διότι το String αντιστοιχεί σε AnsiString (στον C++ Builder 6 -στον 2009 νομίζω θεωρείται UnicodeString) και φυσικά δίχως VCL δεν πρόκειται να περάσει στο linking. Η χρήση του String στην VCL είναι πλέον deprecated πρακτική διότι οδηγούσε σε τέτοιου είδους μπερδέματα (σήμερα αν θέλουμε VCL Strings τα ορίζουμε ως UnicodeString ή AnsiString και όχι ως String). Ακολουθεί ο κώδικας σου μεταγραμμένος ώστε να τρέχει σε C++ Builder 2009, δίχως χρήση VCL αλλά C++ STL string: > #include<stdio.h> #include<conio.h> #include<string.h> #include <algorithm> #include <numeric> #include<iostream.h> #include<vector.h> using namespace std; class User { private: string s1; string s2; public: User() {}; User(string s1_, string s2_) { s1=s1_; s2=s2_; } void setS1(string s1_) { s1=s1_; } void setS2(string s2_) { s1=s2_; } string getS1() { return s1; } string getS2() { return s2; } }; main() { User u1("Geiorgos","11"),u2("Giannis","53"); vector<User> user; user.push_back(u1); user.push_back(u2); printf("%s\n", user[0].getS1().c_str()); printf("%s\n", user[1].getS2().c_str()); getch(); } ΕΞΟΔΟΣ: > Geiorgos 53 Καλή συνέχεια! Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
georginos1989 Δημοσ. 10 Απριλίου 2011 Μέλος Share Δημοσ. 10 Απριλίου 2011 ναι και σαυτην την εκδοση unicodestring νομιζω είναι Λοιπόν έκανα console application χωρις την vcl εγραψα την main Και σε άλλο Unit την κλασση χωρις τα includes της vcl Αλλά βγάζει αυτά τα σφάλματα [bCC32 Error] Unit2.h(10): E2303 Type name expected Full parser context Unit2.cpp(5): #include Unit2.h Unit2.h(8): class User [bCC32 Error] Unit2.h(10): E2139 Declaration missing ; Full parser context Unit2.cpp(5): #include Unit2.h Unit2.h(8): class User [bCC32 Error] Unit2.h(11): E2303 Type name expected Full parser context Unit2.cpp(5): #include Unit2.h Unit2.h(8): class User [bCC32 Error] Unit2.h(11): E2238 Multiple declaration for 'User::string' Full parser context Unit2.cpp(5): #include Unit2.h Unit2.h(8): class User [bCC32 Error] Unit2.h(10): E2344 Earlier declaration of 'User::string' Full parser context Unit2.cpp(5): #include Unit2.h Unit2.h(8): class User [bCC32 Error] Unit2.h(11): E2139 Declaration missing ; Full parser context Unit2.cpp(5): #include Unit2.h Unit2.h(8): class User [bCC32 Error] Unit2.h(14): E2293 ) expected Full parser context Unit2.cpp(5): #include Unit2.h Unit2.h(8): class User [bCC32 Error] Unit2.h(30): E2040 Declaration terminated incorrectly Full parser context Unit2.cpp(5): #include Unit2.h [bCC32 Error] Unit2.h(30): E2190 Unexpected } Full parser context Unit2.cpp(5): #include Unit2.h Τα οποια τα περισσότερα χτυπάνε στα private μελος της κλάσης οπου δηλώνω ta strings Τι βλακεία είναι αυτη.... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 11 Απριλίου 2011 Share Δημοσ. 11 Απριλίου 2011 Τα σφάλματα αυτά οφείλονται σε λάθος δηλώσεις στο Header σου κτλ. Σου επισυνάπτω ένα zip με τα αρχεία του προγράμματος οργανωμένα έτσι ώστε να γίνονται compile σε C++ Builder 2009. classes.zip Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
georginos1989 Δημοσ. 11 Απριλίου 2011 Μέλος Share Δημοσ. 11 Απριλίου 2011 Ναι έτσι δουλευει.... Ευχαριστώ!!!! Αλλά αν μπορείς εξηγησε μου τι διαφορά έχει το std(βασικά τι είναι περίπου) Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 11 Απριλίου 2011 Share Δημοσ. 11 Απριλίου 2011 Ρίξε μια ματιά εδώ καθώς μαζί με την εξήγηση ακολουθούν και παραδείγματα. Σε γενικές γραμμές το std είναι η στάνταρτ ονομασία του namespace της STL και υποδεικνύει στον compiler ότι εσύ θέλεις να χρησιμοποιήσεις κάποια class που ανήκει σε αυτό (πχ. std::string -> από όλες τις string class που μπορεί να υπάρχουν, εγώ θέλω την class string της STL). Πέραν του std:: μπορείς να πεις γενικά στον compiler ότι θέλεις να χρησιμοποιεί τις classes της STL οπουδήποτε γράφοντας "using namespace std;" αλλά στα header αρχεία προτιμώ να δηλώνω ξεχωριστά κάθε namespace προς αποφυγή πιθανών conflicts που μπορεί να προκύψουν. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
georginos1989 Δημοσ. 12 Απριλίου 2011 Μέλος Share Δημοσ. 12 Απριλίου 2011 Γιατί χτυπάει στο παρακάτω προγραμμα στον contructor? [iLINK32 Error] Error: Unresolved external 'Student::Student()' referenced from C:\DOCUMENTS AND SETTINGS\GIORGOS\ΤΑ ΈΓΓΡΑΦΆ ΜΟΥ\RAD STUDIO\PROJECTS\TESTVECTOR\DEBUG\MAIN.OBJ main string name; int aem,grade; vector<Student> s; vector<Grade> g; for(int i=0;i<10;i++) { cout<<"Give name"<<endl; cin>>name ; cout<<"Give aem"<<endl; cin>>aem; Student stud(name,aem); s.push_back(stud); cout<<"Give grade"<<endl; cin>>grade ; g.push_back(Grade(grade,stud)); class Grade{ private: int grade; Student s; public: Grade(); Grade(int grade_, Student s_) { grade=grade_ ; s=s_; } void setgrade(int grade_) { grade=grade_; } int getGrade() { return grade; } }; class Student { private: std::string name; int aem; public: Student(); Student(std::string name_,int aem_){ name=name_; aem=aem_; } void setname(std::string name_){ name=name_; } void setaem(int aem_){ aem=aem_; } int getaem(){ return aem; } std::string getname(){ return name; } }; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
παπι Δημοσ. 12 Απριλίου 2011 Share Δημοσ. 12 Απριλίου 2011 public: Student(); Που ειναι η υλοποιηση του; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.