Heute mal ein uneindeutiger Titel, weil er sonst zu lang geworden wäre:
Ich habe zwei Projekte, nennen wir sie „Framework“ und „Engine“. Framework ist eine statische Lib, Engine eine ausführbare Datei, die zu Framework linkt und Header-Dateien davon #includet.
Im Framework ist eine Klasse deklariert. Die enthält zwei Konstanten, static const deklariert – beide werden von Memberfunktionen, die hinterher in der Lib landen, referenziert (aber nicht direkt vom Projekt Engine, sondern dieses linkt nur die fertigen Funktionen).
In x86-Builds funktioniert das immer. In x64-Builds nur meistens – nämlich genau dann nicht, wenn die zweite Konstante über die Erste berechnet wird. Dann wird beim Kompilieren von Engine ein Linker-Fehler (unresolved external symbol) für die Zweite geschmissen. (Language Extensions sind übrigens immer aus.)
Soo, das Ganze ist nicht nur verzwickt, sondern wegen langer Kompilierzeiten auch nicht durch Trial’n’Error zu beheben … darum habe ich zwei Fragen:
1. Microsofts x64-Compiler arbeitet strenger nach dem Standard als sein x86-Gegenstück, vielleicht liegt es daran.? Darum möchte ich zuerst wissen, ob das hier erlaubt ist (man beachte, dass die Konstanten im x64-Build acht Bytes groß werden!):
Code: Alles auswählen
struct X {
static const size_t A = 1;
static const size_t B = A + 1;
};
Gruß, Ky