Objekt erstellen
-
Guten Tag,
Ich arbeite seit heute mit dem Microsoft Visual Studio 2005 und möchte
ein USB Experimentier Interface ansteuern. Ich habe aber Probleme beim
erstellen einer neuen Klasse.Source Code
#include "stdafx.h" #include "K8055D_C.h" #define CARD_ADDR 0 //ein Objekt der Klasse K8055D erstellen K8055D_C card; int result = 0; int _tmain(int argc, _TCHAR* argv[]) { printf("TEST"); getchar(); return 0; }
^
Folgender Fehler passiert:
Error 1 error C2065: 'K8055D_C' : undeclared identifier h:\visual studio 2005\projects\velleman\velleman\velleman.cpp 17
Error 2 error C2146: syntax error : missing ';' before identifier 'card' h:\visual studio 2005\projects\velleman\velleman\velleman.cpp 17
Error 3 error C2065: 'card' : undeclared identifier h:\visual studio 2005\projects\velleman\velleman\velleman.cpp 17Wäre cool mir jemand kurz ein paar Tips geben kann
-
Woher hast du denn die "K8055D_C.h"? Womöglich hat die Klasse ja einen anderen Namen als der Header (z.B. CK8055D) oder ist in einem Namespace deklariert.
-
#ifdef __cplusplus extern "C" { #endif #define FUNCTION __declspec(dllexport) FUNCTION long __stdcall OpenDevice(long CardAddress); FUNCTION long __stdcall CloseDevice(); FUNCTION long __stdcall ReadAnalogChannel(long Channel); FUNCTION long __stdcall ReadAllAnalog(long *Data1, long *Data2); FUNCTION long __stdcall OutputAnalogChannel(long Channel, long Data); FUNCTION long __stdcall OutputAllAnalog(long Data1, long Data2); FUNCTION long __stdcall ClearAnalogChannel(long Channel); FUNCTION long __stdcall ClearAllAnalog(); FUNCTION long __stdcall SetAnalogChannel(long Channel); FUNCTION long __stdcall SetAllAnalog(); FUNCTION long __stdcall WriteAllDigital(long Data); FUNCTION long __stdcall ClearDigitalChannel(long Channel); FUNCTION long __stdcall ClearAllDigital(); FUNCTION long __stdcall SetDigitalChannel(long Channel); FUNCTION long __stdcall SetAllDigital(); FUNCTION bool __stdcall ReadDigitalChannel(long Channel); FUNCTION long __stdcall ReadAllDigital(); FUNCTION long __stdcall ReadCounter(long CounterNr); FUNCTION long __stdcall ResetCounter(long CounterNr); FUNCTION long __stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime); FUNCTION long __stdcall Version(); FUNCTION long __stdcall SearchDevices(); FUNCTION long __stdcall SetCurrentDevice(long lngCardAddress); #ifdef __cplusplus } #endif
wo finde ich den namen der klass?
diese klasse habe ich von einem Beispiel Programm das läuft.
vielen dank...!
-
Also in diesem Header gibt es keine Klasse - nur einen dicken Haufen an Funktionen. Bist du sicher, daß dein Beispielprogramm nicht noch einen anderen Header eingebunden hat (eventuell auch indirekt über die stdafx.h)?
-
Ja, ich habe noch eine weitere Klasse gefunden:
#ifndef _K8055D_ #define _K8055D_ #include <afx.h> typedef long (CALLBACK* LONG2LONG)(long); typedef void (CALLBACK* VOID2VOID)(void); typedef void (CALLBACK* LONGPLONGP2VOID)(long *, long *); typedef void (CALLBACK* LONGLONG2VOID)(long, long); typedef void (CALLBACK* LONG2VOID)(long); typedef bool (CALLBACK* LONG2BOOL)(long); typedef long (CALLBACK* VOID2LONG)(void); class k8055d { public: k8055d(void); ~k8055d(void); long init(void); long OpenDevice(long CardAddress); void CloseDevice(); long ReadAnalogChannel(long Channel); void ReadAllAnalog(long *Data1, long *Data2); void OutputAnalogChannel(long Channel, long Data); void OutputAllAnalog(long Data1, long Data2); void ClearAnalogChannel(long Channel); void ClearAllAnalog(); void SetAnalogChannel(long Channel); void SetAllAnalog(); void WriteAllDigital(long Data); void ClearDigitalChannel(long Channel); void ClearAllDigital(); void SetDigitalChannel(long Channel); void SetAllDigital(); bool ReadDigitalChannel(long Channel); long ReadAllDigital(); long ReadCounter(long CounterNr); void ResetCounter(long CounterNr); void SetCounterDebounceTime(long CounterNr, long DebounceTime); private: bool dout1; bool dout2; bool dout3; bool dout4; bool dout5; bool dout6; bool dout7; bool dout8; bool din1; bool din2; bool din3; bool din4; bool din5; long da1; long da2; long ad1; long ad2; long ct1; long ct2; long dbct1; long dbct2; bool initialized; HINSTANCE hDLL; LONG2LONG pOpenDevice; VOID2VOID pCloseDevice; LONG2LONG pReadAnalogChannel; LONGPLONGP2VOID pReadAllAnalog; LONGLONG2VOID pOutputAnalogChannel; LONGLONG2VOID pOutputAllAnalog; LONG2VOID pClearAnalogChannel; VOID2VOID pClearAllAnalog; LONG2VOID pSetAnalogChannel; VOID2VOID pSetAllAnalog; LONG2VOID pWriteAllDigital; LONG2VOID pClearDigitalChannel; VOID2VOID pClearAllDigital; LONG2VOID pSetDigitalChannel; VOID2VOID pSetAllDigital; LONG2BOOL pReadDigitalChannel; VOID2LONG pReadAllDigital; LONG2LONG pReadCounter; LONG2VOID pResetCounter; LONGLONG2VOID pSetCounterDebounceTime; }; #endif
Jetzt bekomme ich aber einen anderen Fehler:
Error 1 fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d] c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h 24
-
Und keine der Dir vom Compiler vorgeschlagenen Lösungen funktioniert?
-
Da müsstest du etwas an deinen Projekteinstellungen verändern - entweder du nimmst die MFC-Unterstützung raus oder du definierst das angegebene Symbol "_AFXDLL".
PS: Und da haben wir auch den Namen der Klasse: "k8055d"
-
also wenn ich im cpp file #define _AFXDLL reinschreibe ist der Fehler
immer noch vorhanden. Und was /MD ist verstehe ich nicht
-
was google.de ist verstehst du auch nicht?
-
glaub mir dass ich auch schon gegoogelt habe und nicht der typ bin
der gleich foren vollpostet. aber ich stehe im moment am anschlag und weis nicht weiter...
-
Den /MD mußt du in den Projekteinstellungen unter C/C++ -> Code Generation -> Laufzeit-Bibliothek umstellen. Und statt des #define würde ich das Symbol auch direkt in den Compile-Optionen ergänzen.
(PS: Vielleicht reicht es auch, wenn du die Optionen änderst auf "MFC wird nicht verwendet")
-
Auf was mus ich den /MD setzen und wo finde ich die Compile-Optionen?
Die Option MFC wird nicht verwendet finde ich leider auch nirgends...:(
-
http://msdn2.microsoft.com/en-US/library/2kzt1wy3.aspx
To set this compiler option in the Visual Studio development environment
Open the project's Property Pages dialog box. For details, see How to: Open Project Property Pages.
2.Click the C/C++ folder.
3.Click the Code Generation property page.
4.Modify the Runtime Library property.
(4. ergebnis bei google)
Falls du nicht weißt wie man die 'Projekt Proberty Pages' aufruft, ist dort ein Link zu einem How-To. Den Link findest du wohl ohne Hilfe, oder?...
-
hier gibts noch mehr interessante infos zum dem thema:
-
shit falscher link, sorry
ihr braucht nicht draufzuklicken...ich hasse copy und past
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
hmmpf schrieb:
http://msdn2.microsoft.com/en-US/library/2kzt1wy3.aspx
To set this compiler option in the Visual Studio development environment
Open the project's Property Pages dialog box. For details, see How to: Open Project Property Pages.
2.Click the C/C++ folder.
3.Click the Code Generation property page.
4.Modify the Runtime Library property.
(4. ergebnis bei google)
Falls du nicht weißt wie man die 'Projekt Proberty Pages' aufruft, ist dort ein Link zu einem How-To. Den Link findest du wohl ohne Hilfe, oder?...
Soweit bin ich auch schon. Die Frage war aber auf was muss ich den /MD setzen.
Ich habe lediglich MT / MTd / MD / MDd zur auswahl.Wenn ich /MT auswähle verschwindet de /MD Fehler jedoch erscheint ein neuer:
Error 1 fatal error LNK1104: cannot open file 'libcd.lib' Velleman