AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Classen in C++

Ein Thema von EWeiss · begonnen am 4. Mär 2014 · letzter Beitrag vom 4. Mär 2014
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Classen in C++

  Alt 4. Mär 2014, 15:12
Sorry ja!
Ich weis das ist ein Delphi Forum aber vielleicht kann mir trotzdem jemand helfen.
Ich arbeite an einer C++ Anwendung und verstehe die Erstellung der Klassen anscheinend nicht so richtig.
Ich verwende immer wieder gleich auftretende Funktionen die ich gerne in eine Klasse einsetzen würde
mein Problem ist aber das ich dann Probleme mit dem Linker und dem Zugriff auf dieser Klasse habe.

Code:
char *sTextMenu[MAX_MENU_STRINGS] =
{"Setting",               //0
"Language",               //1
"Mode",                   //2
"no effect",              //3
"life",                   //4
"static color",           //5
"color changer",          //6
"color changer LR",       //7
"channel assignment",     //8
"Info",                   //9
"Exit",                   //10
};

CString sMenuText[MAX_MENU_STRINGS];
char szFileINI[MAX_PATH];
char szCurrentDir[MAX_PATH];
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);
Code:
   // Read Buffer from IniFile
   sprintf(szTemp, "%s\\%s.lng\0", szCurrentDir, szLang);
   for (i = 0; i < MAX_MENU_STRINGS; i++)
   {
      sprintf(szParam, "%d\0", i);
      GetPrivateProfileString("Menu", szParam, sTextMenu[i], Buffer, 512, szTemp);
      sMenuText[i] = Buffer;
      sMenuText[i].Replace("\\t", "\t");
      sMenuText[i].Replace("\\n", "\n");
   }
Wie kann ich jetzt das alles in eine Klasse unterbringen?
Und von allen anderen drauf zugreifen ohne besagte Linker error.

Gruss
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Classen in C++

  Alt 4. Mär 2014, 15:26
Wie sieht deine Klasse aus und was genau sagt der Linker?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Classen in C++

  Alt 4. Mär 2014, 15:31
Wie sieht deine Klasse aus und was genau sagt der Linker?
Language.h
Code:
#pragma once

class Language
{
public:
   Language(void);
   virtual ~Language(void);
};
Language.cpp
Code:
#include "stdafx.h"
#include "Language.h"
#include "atlstr.h"

Language::Language(void)
{
}


Language::~Language(void)
{
}
Ich habe noch keine bzw. mich aber vorher schon dran versucht.
Der Linker meldet dann das die Deklaration unter Verwendung wären.

Normaler weise sollte es doch möglich sein eine Language.h zu erstellen auf der ich dann aus allen Dialogen zugreifen kann, der Übersetzung wegen halt.
Da kommen aber extrem viele Linker Fehler Meldungen.

EDIT:
Hab mal eine Default Klasse addiert.

gruss

Geändert von EWeiss ( 4. Mär 2014 um 16:02 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Classen in C++

  Alt 4. Mär 2014, 17:22
Habe es nochmal versucht
Language.cpp
Code:
#include "stdafx.h"
#include "Language.h"

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

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

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);

};
Wenn ich jetzt die Language.h zu meiner EditChannelAssignment.cpp addiere bekomme ich beim kompilieren
Jede menge unresolved external und andere diverse Fehler.
Mir fällt nicht ein was da falsch sein sollte.

Code:
sprintf(szFileINI, "%s\\Language.ini\0", CLanguage::GetCurrentDir());
Dieser Aufruf sollte mir dann eigentlich die Directory zurückgeben
Aber wie wenn sich der Quelltext nicht mal compilieren lässt.

Fehlt mir noch irgendein include?
Ohne die beiden Dateien funktioniert alles es muss also mit dem einbinden dieser zu tun haben.

PS:
Warum die Variablen jetzt alle static sein müssen obwohl puplic deklariert versteh ich jetzt auch nicht.

gruss

Geändert von EWeiss ( 4. Mär 2014 um 17:24 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Classen in C++

  Alt 4. Mär 2014, 17:28
Wie kompilierst du?

Ich hatte auch mal so ein Problem und es lag einfach daran, dass die .cpp-Datei niemals kompiliert wurde. Die .h-Dateien werden ja immer automatisch kompiliert, weil sie ja inkludiert werden, aber der Compiler erkennt nicht automatisch, dass die .cpp-Datei dazugehört. Deshalb muss die extra im Makefile angegeben werden. Vielleicht fehlt sie dort.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Classen in C++

  Alt 4. Mär 2014, 17:35
Wie kompilierst du?

Ich hatte auch mal so ein Problem und es lag einfach daran, dass die .cpp-Datei niemals kompiliert wurde. Die .h-Dateien werden ja immer automatisch kompiliert, weil sie ja inkludiert werden, aber der Compiler erkennt nicht automatisch, dass die .cpp-Datei dazugehört. Deshalb muss die extra im Makefile angegeben werden. Vielleicht fehlt sie dort.
Die frage wäre dann ist das nun C oder C++.
Ich verwende Visual Studio 2012 wüsste jetzt nicht ob ich da jetzt ein MakeFile anlegen muss, glaube aber nicht.
IN VS ist sie im Projekt eingebunden müsste also erkannt werden.

Werde nochmal einen versuch machen und dann alle Fehler posten.

gruss
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:44 Uhr.
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 by Thomas Breitkreuz