Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ Classen in C++ (https://www.delphipraxis.net/179393-classen-c.html)

BUG 4. Mär 2014 17:57

AW: Classen in C++
 
Ich denke, ich habe das Problem gefunden:

Deine Klassenvariablen hast du nur deklariert, aber nicht definiert. Siehe z.B. diesen Blog-Eintrag.
Andererseits definierst du dir in jeder Datei, die "Language.h" einbindet, die Variable sTextChannelAssignment neu.

Lösung:

Language.cpp
Code:
#include "stdafx.h"
#include "Language.h"

char *sTextChannelAssignment[MAX_CHANNELASSIGNMENT_STRINGS] =
{"Off",                   //0
"Top",                    //1
"Right",                  //2
"Bottom",                 //3
"Left",                   //4
"Combined",               //5
};

CString CLanguage::sText[MAX_CHANNELASSIGNMENT_STRINGS];
char CLanguage::szCurrentDir[MAX_PATH];
char CLanguage::szFileINI[MAX_PATH];
char CLanguage::szLang[MAX_PATH];
char CLanguage::szTemp[512];
char CLanguage::Buffer[1024];
char CLanguage::szParam[32];   

CLanguage::CLanguage(void)
{
}


CLanguage::~CLanguage(void)
{
}

char CLanguage::GetCurrentDir()
{
   int i = GetCurrentDirectory(255, (char*)szCurrentDir);
   if (szCurrentDir[i - 1] == '\\')
     szCurrentDir[i - 1] = 0;

   return szCurrentDir[i];
}
Language.h
Code:
#pragma once

#include "atlstr.h"

#define MAX_CHANNELASSIGNMENT_STRINGS 6

extern char *sTextChannelAssignment[MAX_CHANNELASSIGNMENT_STRINGS];

class CLanguage
{
private:

public:
   static CString sText[MAX_CHANNELASSIGNMENT_STRINGS];
  static char szCurrentDir[MAX_PATH];
  static char szFileINI[MAX_PATH];
  static char szLang[MAX_PATH], szTemp[512], Buffer[1024], szParam[32];   

   static char GetCurrentDir();

   CLanguage(void);
   virtual ~CLanguage(void);

};
Ich konnte es leider nicht ausprobieren, da ich unter Windows keinen C++-Compiler installiert habe :mrgreen:

Namenloser 4. Mär 2014 18:12

AW: Classen in C++
 
Interessant. Ich hatte unter C++ selber bisher nur mit statischen Methoden zu tun, aber nicht mit statischen Variablen. Wieder was gelernt...

Es sind immer solche Momente – wenn es plötzlich ungewohnt Low-Level wird – in denen man C++ anmerkt, dass es eigentlich doch nur ein Aufsatz für C ist.

EWeiss 4. Mär 2014 19:29

AW: Classen in C++
 
@BUG @Namenloser

Danke euch;)
Jo ist einiges anders als in Delphi :)

gruss

EWeiss 4. Mär 2014 19:35

AW: Classen in C++
 
Wäre klasse wenn ich das teil noch in eine function bekomme
Hab ich es einmal verstanden sollte das kein Problem mehr sein ;)

Code:
   // Find available Language Files
    void *hSearch;
    WIN32_FIND_DATA wfd;
    char szFile[MAX_PATH];
    hSearch = FindFirstFile("*.lng", &wfd);
    GetPrivateProfileString("Common", "Language", "English", szLang, 256, szFileINI);

    nCurrentLanguage = MENUID_FIRST_LANGUAGE;
    AppendMenu(m_hLanguageSubMenu, MF_STRING, MENUID_FIRST_LANGUAGE, "&English");
    nLanguages = 1;

    if (hSearch != INVALID_HANDLE_VALUE)
    {
       do
       {
          strcpy(szFile, wfd.cFileName);
          szFile[strlen(szFile) - 4] = 0;
          if (!strcmp(szFile, "English"))
             continue;

          if (!strcmp(szFile, szLang))
             nCurrentLanguage = MENUID_FIRST_LANGUAGE + nLanguages;
          AppendMenu(m_hLanguageSubMenu, MF_STRING, MENUID_FIRST_LANGUAGE + nLanguages, szFile);
          nLanguages++;
       }
       while (FindNextFile(hSearch, &wfd));
    }
    FindClose(hSearch);
Sollte ein Array der Language Files zurück gegeben werden.
Funktioniert ist aber zur zeit nicht als function ausgelegt.

Sollte Teil der language.h sein

gruss

BUG 4. Mär 2014 20:16

AW: Classen in C++
 
Zitat:

Zitat von EWeiss (Beitrag 1250626)
Sollte ein Array der Language Files zurück gegeben werden.
Funktioniert ist aber zur zeit nicht als function ausgelegt.

Soll das eine Funktion werden oder eine Methode von CLanguage?
Ich könnte mir vorstellen, das szLang die Klassenvariable von CLanguage ist. Aber wo kommt m_hLanguageSubMenu her? Das gleiche gilt für nLanguages und nCurrentLanguage.

Zitat:

Zitat von EWeiss (Beitrag 1250626)
Sollte Teil der language.h sein

Warum? Soll das eine inline-Funktion werden? Ansonsten gibt es kaum einen guten Grund, warum du die Funktion im Header definieren solltest.


BTW: Wenn du weiter mit C++ arbeiten willst, solltest du dir die Standard-Library angucken. Nahe an den Betriebssystemfunktionen mögen Character-Buffer noch sinnvoll sein, ansonsten ist die Klasse std::string um Welten angenehmer. Auch die Container-Klassen sind ziemlich nützlich.

EWeiss 4. Mär 2014 20:21

AW: Classen in C++
 
Zitat:

Zitat von BUG (Beitrag 1250637)
Zitat:

Zitat von EWeiss (Beitrag 1250626)
Sollte ein Array der Language Files zurück gegeben werden.
Funktioniert ist aber zur zeit nicht als function ausgelegt.

Soll das eine Funktion werden oder eine Methode von CLanguage?
Ich könnte mir vorstellen, das szLang die Klassenvariable von CLanguage ist. Aber wo kommt m_hLanguageSubMenu her? Das gleiche gilt für nLanguages und nCurrentLanguage.

Zitat:

Zitat von EWeiss (Beitrag 1250626)
Sollte Teil der language.h sein

Warum? Soll das eine inline-Funktion werden? Ansonsten gibt es kaum einen guten Grund, warum du die Funktion im Header definieren solltest.


BTW: Wenn du weiter mit C++ arbeiten willst, solltest du dir die Standard-Library angucken. Nahe an den Betriebssystemfunktionen mögen Character-Buffer noch sinnvoll sein, ansonsten ist die Klasse std::string um Welten angenehmer. Auch die Container-Klassen sind ziemlich nützlich.

hLanguageSubMenu.. JA hatte ich nicht bedacht.
Denke muss die abfrage dann wohl in der aktuellen Funktion belassen.
Ist aber nicht weiter tragisch da ich diese nur einmal aufrufe um im Ordner die Sprachdateien zu finden.

Man will es immer besonders gut machen und schlechten code will ich nicht gerade abliefern ;)
Danke für die zusätzlichen Infos werden bestimmt mal nützlich sein.

Ach so.. Danke nochmal im nachhinein für mein Geburtstags Geschenk! :)
Die Classe läuft jetzt so wie sie soll.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:34 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz