Avatar billede ellebab Nybegynder
17. august 2004 - 14:11 Der er 11 kommentarer og
1 løsning

Problem med klasse

Hej Eksperter.
Jeg har et lille begynder spørgsmål vedr. klasse og anvendelse af klasser.
Når jeg kompilere følgende kode, får jeg fejlen  "login2Dlg.cpp(214): error C2143: syntax error : missing ';' before '.'"

Min klasse ser således ud:

//Database klasse
class DbCon : public CDatabase
{
public:
    DbCon() {};
    void DbOpen();
    void DbClose();
    bool Login();
};

void DbCon::DbOpen() {
    CString        conn;
    CDatabase dbase;
    if(dbase.OpenEx("ODBC;DESCRIPTION=;DRIVER=MySQL ODBC 3.51 Driver;SERVER=localhost;UID=root;PWD=;", CDatabase::openReadOnly | CDatabase::noOdbcDialog) == TRUE){
    dbase.ExecuteSQL("USE itdb");
    };
};

Fejlen opstår i denne funktion:
void Clogin2Dlg::OnBnClickedLogin()
{
    GetDlgItemText(IDC_USR,user);
    GetDlgItemText(IDC_PWD,password);
   
    if (connected==false) {
->        DbCon.DbOpen();


Hvad gør jeg forkert?
Avatar billede arne_v Ekspert
17. august 2004 - 14:15 #1
DbOpen er ikke en statisk metode.

Altså skal den kaldes som:

instansDbCon.DbOpen();
Avatar billede arne_v Ekspert
17. august 2004 - 14:16 #2
Og hvis den var statisk så bruger C++ syntaxen:

DbCon::DbOpen();
Avatar billede ellebab Nybegynder
17. august 2004 - 15:16 #3
Hvorfor er det at jeg ikke kan bruge DbCon.DbOpen()?
Den synes jeg altid man plejer at hente funktioner fra en bestemt klasse!?
Avatar billede ellebab Nybegynder
17. august 2004 - 15:19 #4
Jeg får fejlen:
login2Dlg.cpp(214): error C2065: 'instansDbCon' : undeclared identifier
Når jeg sætte den ind i min kode..
Avatar billede arne_v Ekspert
17. august 2004 - 15:22 #5
Det skal være en instans af klassen DbCon (som navnet lidt antyder).
Avatar billede arne_v Ekspert
17. august 2004 - 15:22 #6
Og ikke statisk metoder kan kun kaldes på en instans.
Avatar billede ellebab Nybegynder
17. august 2004 - 15:50 #7
Hvordan vil det korrekte kald af DbCon::DbOpen() så se ud?
Jeg har prøvet med instansDbCon.DbOpen(); men så får jeg fejlen :
login2Dlg.cpp(214): error C2065: 'instansDbCon' : undeclared identifier
Avatar billede arne_v Ekspert
17. august 2004 - 19:12 #8
Hvis du ændrer:

void DbOpen();

til:

static void DbOpen();

kan du kalde med:

DbCon::DbOpen();
Avatar billede arne_v Ekspert
17. august 2004 - 19:12 #9
(du skal nok også have lavet noget af det andet static)
Avatar billede arne_v Ekspert
17. august 2004 - 19:13 #10
Hvis du laver en:

DbCon instanceDbCon;

eller:

DbCon *instanceDbCon = new DbCon();

kan du kalde:

instanceDbCon.DbOpen();

eller:

instanceDbCon->DbOpen();
Avatar billede ellebab Nybegynder
19. august 2004 - 13:49 #11
Tak for svaret Arne, det virker!
Jeg havde i mit program glemt at declare min klasse..
Smider du lige et svar, så får du pointene..
Avatar billede arne_v Ekspert
19. august 2004 - 13:50 #12
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester