BYTE Pointer Problem --> funzt immer noch nicht :-(
-
Hallo Zusammen,
bin C++ Anfänger und habe leider Schwierigkeiten beiden ersten Implementierung. Vielleicht kann mir jemand für das unten beschriebene Problem weiterhelfen.
Ich möchte in einer Klasse ein Attribut vom Typ Byte-Pointer anlegen.
Hierzu Folgende Definition: byte* memWrite;
Bei der Kompilierung bekomme ich dann den Fehler:
c:\(18): error C2143: Syntaxfehler: Es fehlt ';' vor '*'
Ich sehe hier kein fehler beim Anlegen des Attributs memWrite.
Das ein ; davor fehlt ist auch nicht der Fall. Der Code lautet wie folgt:
#include <afx.h>
#include <wininet.h>
#include <stdio.h>#ifndef _CACHE_
#define _CACHE_class CACHE
{
private:
CFile diskFile;
CFile indexFile;
byte* memoryWrite;
byte* listViewCache[];public:
read_diskFile(CFile);
write_diskFile(CFile);
get_indexFile(CFile, CFile);
write_indexFile(CFile, CFile);
write_cache(byte*);
get_cache(byte*, byte*);};
#endif // _CACHE_Hoffe ich habe jetzt nicht zuviel gefragt.
Wäre super wenn mir irgendjemand weiterhelfen könnte.
Danke.
Viele Grüße
Adrenalin
-
Die Wahrheit ist: Dein Compiler kennt 'byte' nicht, deshalb deutet er das erste Vorkommen als Variable ohne Typangabe (bin mir nicht sicher, aber das dürfte eine int-Variable werden) und beschwert sich über das * hinter dem Variablennamen.
Ergänze doch mal am Programmanfang (hinter den Include-Guards) ein "typedef unsigned char byte;" dann sollte es funktionieren.
PS: Eigentlich sollte nichts in deinen Headern außerhalb der Include-Guards stehen - auch keine anderen #include's
-
Eigentlich einfach: Einen Typ namens "byte" gibt es weder in Standard-C++ noch in den von Dir inkludierten Headern...
EDIT: Mist zu langsam :p
-
Danke Euch beiden hat funktioniert. Ist ja im nachhinein klar wie gesagt bin Anfänger.
Hätte noch eine Frage bzgl. der Include's. Die habe ich nur wegen dem CFile verwendet. Brauch ich hierfür alle drei oder würde ein bestimmter Include reichen?
DAnke
-
CFile ist in der <afx.h> deklariert, also benötigst du nur diesen Header. (btw würde ich dir empfehlen, die Parameter statt per Wert per Referenz zu übergeben)
-
Hallo nochmals,
habe nun folgendes Code: 1mal cache.h
//cache.h
//Definition der Klasse Cachetypedef unsigned char byte;
#ifndef _CCache_
#define _CCache_class CCache
{
private:
CFile diskFile;
CFile indexFile;
byte* m_memoryWrite;
byte* m_listViewCache;
int m_id;public:
void wcache(byte*);
byte *gcache(int);};
#endif // _CACHE_-------------------------------------------------
LogView.cpp// LogView.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//#include "stdafx.h"
#include "LogView.h"
#include "cache.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif// Das einzige Anwendungsobjekt
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;// MFC initialisieren und drucken. Bei Fehlschlag Fehlermeldung aufrufen.
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: Passen Sie den Fehlercode an Ihre Anforderungen an
_tprintf(_T("Schwerwiegender Fehler: MFC-Initialisierung fehlgeschlagen\n"));
nRetCode = 1;
}
else
{
// TODO: Schreiben Sie hier den Code für das Verhalten Ihrer Anwendung.
}return nRetCode;
}Die LogView.cpp wurde mir ja automatisch generiert da ich eine Win32Anwendung mit MFC Unterstützung erzeugt habe.
Wenn ich diese Anwendung ausführe bekomme ich folgende Fehlermeldung zur Laufzeit:
LogView.exe': 'C:\ciric\Logviewer\LogView\Debug\LogView.exe' geladen, Symbole geladen.
'LogView.exe': 'C:\WINDOWS\system32\ntdll.dll' geladen, Keine Symbole geladen.
'LogView.exe': 'C:\WINDOWS\system32\kernel32.dll' geladen, Keine Symbole geladen.
'LogView.exe': 'C:\WINDOWS\system32\msvcp71d.dll' geladen, Symbole geladen.
'LogView.exe': 'C:\WINDOWS\system32\msvcr71d.dll' geladen, Symbole geladen.
'LogView.exe': 'C:\WINDOWS\system32\mfc71d.dll' geladen, Symbole geladen.
'LogView.exe': 'C:\WINDOWS\system32\gdi32.dll' geladen, Keine Symbole geladen.
'LogView.exe': 'C:\WINDOWS\system32\user32.dll' geladen, Keine Symbole geladen.
'LogView.exe': 'C:\WINDOWS\system32\advapi32.dll' geladen, Keine Symbole geladen.
'LogView.exe': 'C:\WINDOWS\system32\rpcrt4.dll' geladen, Keine Symbole geladen.
'LogView.exe': 'C:\WINDOWS\system32\SHLWAPI.DLL' geladen, Keine Symbole geladen.
'LogView.exe': 'C:\WINDOWS\system32\msvcrt.dll' geladen, Keine Symbole geladen.
'LogView.exe': 'C:\WINDOWS\system32\oleaut32.dll' geladen, Keine Symbole geladen.
'LogView.exe': 'C:\WINDOWS\system32\ole32.dll' geladen, Keine Symbole geladen.
'LogView.exe': 'C:\WINDOWS\system32\MFC71DEU.DLL' geladen, Keine Symbole geladen.
Das Programm "[3256] LogView.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.Ich bin richtig am verzweifeln da ich x-mal schon ein neues Projekt erstellt habe und jedesmal dieser Fehler auftaucht. Es muss an was ganz simplen liegen.
Bin ich den zu blöd?Wäre echt super wenn irgendeiner mir weiterhelfen könnte.
Danke.
Viele Grüße
Adrenalin
-
Das Programm wird sauber und fehlerfrei gestartet und wieder beendet, d.h. es läuft aus eigener Kraft von { bis }.
-
Ich sehe da keinen Fehler - das Programm startet, lädt ein paar DLLs (die "keine Symbole geladen"-Meldungen sind vom Debugger und sagen dir, daß du keinen Zugriff auf die Quelltexte der DLLs hast) und beendet sich wieder - etwas anderes ist bei der aktuellen _tmain() auch nicht zu erwarten.
Um deine Funktionen "in Aktion" zu erleben, mußt du sie aufrufen

-
Hmm ich verstehe aber nicht warum, mein Code nicht ausgeführt wird wenn es im folgenden Bereich implementiert wird:
else
{
// TODO: Schreiben Sie hier den Code für das Verhalten Ihrer Anwendung.------------Hier klatsche ich mein Code rein jedoch wird es nicht ausgeführtt..
}Sorry falls ich zu stressig werde.
-
Dann zeig doch mal, was du dort für Code "reingeklatscht" hast.
-
Hmm ich verstehe aber nicht warum, mein Code nicht ausgeführt wird wenn es im folgenden Bereich implementiert wird:
else
{
// TODO: Schreiben Sie hier den Code für das Verhalten Ihrer Anwendung.------------Hier klatsche ich mein Code rein jedoch wird es nicht ausgeführtt..
}Sorry falls ich zu stressig werde.
-
CCache w_Cache;
byte array[10];w_Cache.wcache(array);
das steht in dem Bereich unter Else drin.
Und die Methode wcache ist wie folgt implementiert:
void CCache::wcache(byte* memoryWrite)
{
cout << "memoryWrite: " << memoryWrite << endl;}
Ich erwarte das mir das Programm die Anfangsadresse von meinem Array gibt.
Ist das Falsch was ich hier mache?
-
Dazu sei zu erwähnen dass bei einer Windows-GUI-Anwendung natürlich ein Window geöffnet werden sollte, um etwas anzuzeigen. Eine Windows-Konsolenanwendung würde das natürlich automatisch machen.