Frage zum bitweisen Vergleich ('&'-Operator)

Ja. Dateiendung ".i".
Ok, Danke

Warum schaust du denn nicht einfach nach? :confused: "cl" in der VS 2010 Kommandoshell ausführen...
Weil ich bis eben nicht wusste wo - und auch den Aufruf der CMD-Shell aus dem Studio heraus nicht kannte ;)
==> 32-Bit C/C++-Optimierungscompiler V16.00.30139.01

Project Properties -> C/C++ -> General -> Common Language RunTime Support
Wobei dann der Fehler nur bei einer ref class auftreten dürfte.. ?
ok, das Feld dort war leer, habe es jetzt aber mal bewusst auf "keine Unterstützung" gesetzt
-----
So, die Compilierung ist jetzt durchgelaufen - aber ich finde keine Datei *.i .... :rolleyes:

Gruß
Klaus
 
Weil ich bis eben nicht wusste wo - und auch den Aufruf der CMD-Shell aus dem Studio heraus nicht kannte ;)
==> 32-Bit C/C++-Optimierungscompiler V16.00.30139.01
Das scheint dann aber ein RC zu sein, oder? Die endgültige Verssion ist 16.00.30319.01. Ich finde keine Referenz zu der von dir angegebenen Version. Wo hast du die denn her?

Die Versionsnummer ist jedenfalls verdächtig. Es könnte sich evtl. um einen Bug im Compiler handeln.
So, die Compilierung ist jetzt durchgelaufen - aber ich finde keine Datei *.i .... :rolleyes:
:suchen:

Gruß
 
Moin,

Das scheint dann aber ein RC zu sein, oder? Die endgültige Verssion ist 16.00.30319.01.
Ich finde keine Referenz zu der von dir angegebenen Version. Wo hast du die denn her?
Die Versionsnummer ist jedenfalls verdächtig. Es könnte sich evtl. um einen Bug im Compiler handeln.
hmm, ich mag mich ja täuschen oder auch nicht, aber sieht nicht Deine Nummer der von mir angegeben verdammt ähnlich ? :D
Die hat mir das 'cl' angegeben .....
Es handelt sich wie gesagt um die 30-Tage-Testversion von der MS-Downloadseite!

Super Idee, die hatte ich auch schon, aber such mal in Win7 nach "*.i" ..... :suspekt:

So, ich mittlerweile eh' nicht mehr in der Firma und habe von hier keinen Zugriff mehr!
Ich werde am Montag noch mal schauen ...

Danke und Gruß
Klaus
 
hmm, ich mag mich ja täuschen oder auch nicht, aber sieht nicht Deine Nummer der von mir angegeben verdammt ähnlich ? :D
30319 ist ziemlich anders als 30139, meinst du nicht? 30128 war die RC Version. Keine Ahnung ob es noch eine 2. RC dazwischen gab...
Es handelt sich wie gesagt um die 30-Tage-Testversion von der MS-Downloadseite!
Finde ich ja etwas befremdlich, dass MS nicht mal den aktuellen Compiler beilegt (der ja auch Teil vom SDK ist)...
Super Idee, die hatte ich auch schon, aber such mal in Win7 nach "*.i" ..... :suspekt:
OMG. Die Dateien werden wohl kaum im gesamten System verstreut rumfliegen, oder?! ;-] Die Dateien sind unterhalb vom Projektverzeichnis. :rolleyes:

Gruß
 
Moin,

sorry, musste mich gestern leider anderen Dingen widmen ... :rolleyes:

30319 ist ziemlich anders als 30139, meinst du nicht? 30128 war die RC Version. Keine Ahnung ob es noch eine 2. RC dazwischen gab...
Ok, hast ja Recht; wer lesen kann ist klar im Vorteil ... :p

Finde ich ja etwas befremdlich, dass MS nicht mal den aktuellen Compiler beilegt (der ja auch Teil vom SDK ist)...
KA, war auf jeden Fall die aktuelle Version letzte Woche .....

Die Dateien werden wohl kaum im gesamten System verstreut rumfliegen, oder?! ;-]
Die Dateien sind unterhalb vom Projektverzeichnis. :rolleyes:
Ist ja super - habe eben mal das Projektverzeichnis von Hand durchsucht, nachdem ein erneutes Suchen nach "*.i" nix brachte ...
Bin dabei auf die Dateien gestossen :eek: allerdings werden sie von Win7 mit dem Typ "Preprocessed C/C++ Source" angezeigt :(
Erst ein Blick in "Eigenschaften" zeigt dahinter ein verstecktes "(.i)" an ..... :suspekt:

Und wonach suche ich nun in diesen Dateien genau?
Habe mir mal die entsprechende Source zur o. g. Meldung angeschaut.
Mit der Zeilennummer, in der der Fehler auftrat, finde ich zum einen diverse Includes, zum andern finde ich auch die Codestelle, aber ohne irgendwelche Anmerkungen drumherum ......

Gruß
Klaus
 
Hi.
Und wonach suche ich nun in diesen Dateien genau?
Habe mir mal die entsprechende Source zur o. g. Meldung angeschaut.
Mit der Zeilennummer, in der der Fehler auftrat, finde ich zum einen diverse Includes, zum andern finde ich auch die Codestelle, aber ohne irgendwelche Anmerkungen drumherum ......
Sieht die Codestelle denn noch genauso aus wie im Quelltext oder wurde etwas mit Makros verändert?

Welchen Typ haben die Variablen? Handelt es sich wirklich um long oder ist das ein typedef welches irgendwo definiert ist?

Ansonsten könntest du ja mal ein Minimalbeispiel machen wo du genau diesen Fehler bekommst.

Und um welchen Operator geht es denn überhaupt? Nimm doch mal die Anweisung auseinander.

Ich habe aber in der (endlos langen ) Fehlerliste noch folgende Warnung für die Source stehen:
_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
Das mir das nichts sagte (und bislang dazu auch nichts gefunden habe) habe ich dies erstmal hinten angestellt ...
Du solltest das Makro _WIN32_WINNT definieren um einzustellen für welche Windows Version der Code kompiliert werden soll.

Allerdings erwähnst du so beiläufig das es eine (endlos) lange Fehlerlist gibt. :rolleyes: Evlt. ist der C2678 auch nur ein Folgefehler?

Gruß
 
Zuletzt bearbeitet:
Moin,

Sieht die Codestelle denn noch genauso aus wie im Quelltext oder wurde etwas mit Makros verändert?
Ja, außer dass an zwei nachfolgenden Stellen das Makro TRACE durch "__noop" ersetzt wurde ...
Wenn ich richtig verstanden habe, muss ich es wohl durch ATLTRACE (oder besser ATLTRACE2 ? ) ersetzen ...

Welchen Typ haben die Variablen? Handelt es sich wirklich um long oder ist das ein typedef welches irgendwo definiert ist?
nein, "echtes" long sowie ersten Post geschrieben

Ansonsten könntest du ja mal ein Minimalbeispiel machen wo du genau diesen Fehler bekommst.
ok, muss ich mal heute Nachmittag schauen, ob ich das hinbekomme - hab' mich damit bislang wenig auseinandersetzen müssen ;)

Und um welchen Operator geht es denn überhaupt? Nimm doch mal die Anweisung auseinander.
Also da der Fehler in der Zeile
C++:
bLizCheck = ( lLizFlag & m_lLicenseNSLAktuell ) == lLizFlag;
auftritt, wird es ja wohl ein deutig das "&" sein, oder ?

Du solltest das Makro _WIN32_WINNT definieren um einzustellen für welche Windows Version der Code kompiliert werden soll.
Habe diesbezüglich mal ein wenig gegoogelt ...
Habe jetzt im MFC-Header "stdafx.h" folgende Stelle gefunden:
C++:
#undef _WIN32_WINNT
#define _WIN32_WINNT _WIN32_WINNT_MAXVER
gefunden ....

Lt. http://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspx müsste ich hier dann ja wohl
#define _WIN32_WINNT_WIN7 0x0601
einfügen ...
Jetzt frage ich mich nur, ob das o. g. define dann raus kann/muss :confused:

Allerdings erwähnst du so beiläufig das es eine (endlos) lange Fehlerlist gibt. :rolleyes: Evlt. ist der C2678 auch nur ein Folgefehler?
Das denke ich nicht, das dies der einzige Fehler für diese Source ist.
Neben einigen inkompatiblen LIBs (bspw. zu regex) kommen natürlich ellenlang Fehler wie
- ersetze sprintf durch sprintf_s etc.
- bisher reichte es eine Zählvariable für mehrere for-Schleifen innerhalb der ersten zu deklarieren und dann in weiteren zu verwenden ...
das geht nun scheinbar mehr und wird hier hundertfach angemeckert!
Code:
// alt
for( int i = 0; i < X; i++) {}
for( i = 0; i < Y; i++) {}

// neu
for( int i = 0; i < X; i++) {}
for( int i = 0; i < Y; i++) {} // !

So, das reicht erstmal - werde mich nach dem Mittag mal an einem Minimalbeispiel versuchen

Gruß
Klaus
 
Zuletzt bearbeitet von einem Moderator:
Also da der Fehler in der Zeile
C++:
bLizCheck = ( lLizFlag & m_lLicenseNSLAktuell ) == lLizFlag;
auftritt, wird es ja wohl ein deutig das "&" sein, oder ?
Oder das "==", oder?! ;-]
Habe diesbezüglich mal ein wenig gegoogelt ...
Habe jetzt im MFC-Header "stdafx.h" folgende Stelle gefunden:
C++:
#undef _WIN32_WINNT
#define _WIN32_WINNT _WIN32_WINNT_MAXVER
gefunden ....

Lt. http://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspx müsste ich hier dann ja wohl
#define _WIN32_WINNT_WIN7 0x0601
einfügen ...
Nein. Wenn das Programm erst ab Windows 7 oder höher lauffähig sein soll:
C:
#define _WIN32_WINNT _WIN32_WINNT_WIN7
Jetzt frage ich mich nur, ob das o. g. define dann raus kann/muss :confused:
Anscheinend ist das Makro _WIN32_WINNT_MAXVER nicht definiert (da die WinSDKVer.h nicht eingebunden wurde) oder die Windows.h wurde (direkt oder indirekt) vor den Anweisungen eingebunden.

Meistens ist es aber besser direkt festzulegen ab welcher Windowsversion das Programm laufen soll.

Das denke ich nicht, das dies der einzige Fehler für diese Source ist.
Neben einigen inkompatiblen LIBs (bspw. zu regex) kommen natürlich ellenlang Fehler wie
- ersetze sprintf durch sprintf_s etc.
Kann man getrost abschalten. (/D_CRT_SECURE_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS)
- bisher reichte es eine Zählvariable für mehrere for-Schleifen innerhalb der ersten zu deklarieren und dann in weiteren zu verwenden ...
das geht nun scheinbar mehr und wird hier hundertfach angemeckert!
Natürlich geht das nicht. Es ist kein C++.

Gruß
 
Zuletzt bearbeitet von einem Moderator:
Oder das "==", oder?! ;-]
oops, da ist wohl beim Einfügen hier was in die Hose gegangen ... die richtige Meldung lautet so:
error C2678: Binärer Operator '&': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'long' akzeptiert (oder keine geeignete Konvertierung möglich)

Nein. Wenn das Programm erst ab Windows 7 oder höher lauffähig sein soll:
C:
#define _WIN32_WINNT _WIN32_WINNT_WIN7
Leider kann ich die stdafx nicht ändern, da mir scheinbar Rechte fehlen (ob ich als Admin angemeldet bin) ...

Anscheinend ist das Makro _WIN32_WINNT_MAXVER nicht definiert
hmm, ich hätte jetzt die Meldung so interpretiert, das genau in der stdafx passiert ...

(da die WinSDKVer.h nicht eingebunden wurde) oder die Windows.h wurde (direkt oder indirekt) vor den Anweisungen eingebunden.
Meistens ist es aber besser direkt festzulegen ab welcher Windowsversion das Programm laufen soll.
Stimmt, WinSDKVer.h kennt weder meine Software noch ich ...
Brauche ich die wegen .NET4, das mit installiert wurde ?
Wo muss die den included werden? Einmalig global oder etwa in jeder Source à la stdafx ?

Kann man getrost abschalten. (/D_CRT_SECURE_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS)
Aha, warum ist das denn so ungefährlich ****

Gruß
Klaus
 
oops, da ist wohl beim Einfügen hier was in die Hose gegangen ... die richtige Meldung lautet so:
Aha.
Leider kann ich die stdafx nicht ändern, da mir scheinbar Rechte fehlen (ob ich als Admin angemeldet bin) ...
Du könntest die Einstellung ja auch im Projekt vornehmen.
hmm, ich hätte jetzt die Meldung so interpretiert, das genau in der stdafx passiert ...
Du hast die vollständige Meldung nicht gepostet und in deinem Codeausschnitt aus der stdafx.h steht auch nichts von der Warnung...
Stimmt, WinSDKVer.h kennt weder meine Software noch ich ...
Brauche ich die wegen .NET4, das mit installiert wurde ?
Das hat nichts mit .NET zu tun. Die Datei ist Teil des Windows SDKs.
Wo muss die den included werden? Einmalig global oder etwa in jeder Source à la stdafx ?
Einbinden muß man die überhaupt nicht. Wenn man allerdings das Makro _WIN32_WINNT_MAXVER verwenden will sollte man sicherstellen, dass das Makro auch definiert ist...
Aha, warum ist das denn so ungefährlich ****
Weil es nur nervige, unnütze Warnungen sind.

Wenn man unbedingt die nicht-Standard-Funktionen verwenden will, dann kann man ja die Warnungen wieder einschalten und alle Funktionsaufrufe ersetzen.

Gruß
 
Zurück