Hej har ett problem med ett openGLexempel, använder Dev-C++ 4.9.9.2 Snälla, det här går ju inte att läsa. Nu är inlägget mer konkret hoppas jag. Förstår mig inte på declspec alls. :S [... borttaget pladder ... ] Tack för hjälpen, viss framgång men fortfarande får jag en uppsjö av fel. Nu ser koden ut såhär: Ja, du måste ju fortfarande göra den till en #define; Shär då: Ja, naturligtvis... jag är ju bra fånig. Det är specifikt för MS Visual C++, alltså kommer det inte funka i mingw (kompilatorn som följer med dev-c++). Jag vet inte alls exakt vad selectany gör. eftersom ingen tycks kunna googla, så här är länken till vad selectany gör http://msdn2.microsoft.com/en-us/library/5tkz6s71(VS.80).aspx Man orkar inte googla när man bara får massa värdelösa träffa, t.ex. länken där :P Jo, då den har jag allt kikat på. Men kombinationen MS-specifikt, rörig förklaring, och inte uppenbar nytta i den här frågan gjorde att jag inte valde att kolla mer på det.__declspec(selectany)
Här är en del av koden:
Kod i main.cpp/***************************************************************
// för att lösa korsreferenser...
#define DECLARE __declspec(selectany)
DECLARE HDC hDC;
DECLARE HWND hWnd;
DECLARE RECT Window;
DECLARE CDXInput Input;
DECLARE int width;
DECLARE int height;
Felen jag får på de rader där jag försöker deklarera något är:
C:\Docendo\Övningsfiler\Grundkod\3D\BasecodeGL\Main.h [Warning] `selectany' attribute directive ignored
Varför ignoreras mitt försök till korsreferenser? Någon som har en aning?
Sv: selectany-problem
Jag antar att du bara har klistrat in ett färdigt program och försökt kompilera det. Om det inte funkar så är det antingen felprogrammerat (osannolikt) eller så har du någonstans gjort fel inställningar, angett fel namn, etc. Och det är mer eller mindre omöjligt att svara på vad det kan vara för fel.
Det vettiga sättet att göra på är att börja med ett minimalt program, lägga till saker efter hand och hela tiden kompilera och testa för att se till att det är korrekt.Sv:selectany-problem
Sv: selectany-problem
Generellt bör man undvika preprocessor-direktiv. Det finns ett mycket litet antal anledningar kvar i C++.
Vad du menar med "korsreferenser" skulle väl kunna vara extern. Kolla upp nyckelordet "extern" om du inte känner till det. Och är det det du vill ha så bör du tänka om designen lite.
Skulle rekommendera att börja från grunden istället, börja med det minimala c++-programmet, bygg på till det minimala OpenGL-programmet osv.
EDIT:
Nej, nej. Jag har fel, och har tagit bort det värsta snacket där uppe.
Nu förstår jag vad poängen är.
Anledningen till att det inte funkar är helt enkelt att () tolkas som att du använder ett argument. Jag är tveksam till om man kan göra en sån deklaration, i så fall måste du nog escapa ( och ), men eftersom preprocessor-direktiv är något obsolete så är det inget jag kan svara på hur man gör på rak arm.
EDIT igen:
Fan vet förresten, det borde ju funka. Fungerar det om du inte använder det som ett #define?
Vad det nog handlar om är att du också måste göra en initiering i samband med att du deklarerar.Sv:selectany-problem
Nu ser kodsnutten ut såhär:
<code>
//#define
35. DECLARE __declspec(selectany)
36.
37.
38.
39. DECLARE HDC hDC;
40. DECLARE HWND hWnd;
41. DECLARE RECT Window;
</code>
Nu får man inga attribut ignored varningar (Y) men många fel är kvar. Jag fick inte riktigt fix på det där med att initiera i samband med deklarationen, om det görs på rätt sätt kanske det kan fungera.
Några av felen:
39 C:\Docendo\Övningsfiler\Grundkod\3D\BasecodeGL\Main.h expected constructor, destructor, or type conversion before "DECLARE"
39 C:\Docendo\Övningsfiler\Grundkod\3D\BasecodeGL\Main.h expected `,' or `;' before "DECLARE"
40 C:\Docendo\Övningsfiler\Grundkod\3D\BasecodeGL\Main.h `DECLARE' does not name a type Sv:selectany-problem
<code>
35. DECLARE __declspec(selectany)
36.
37.
38.
39. DECLARE HDC hDC = NULL;
40. DECLARE HWND hWnd = NULL;
41. DECLARE RECT Window = NULL;
</code>
Något är fel på rad 35, jag har ingen aning om vad men inget semi-kolon eller klammer tycks hjälpa när jag exprimenterat lite.
Fel:
39 C:\Docendo\Övningsfiler\Grundkod\3D\BasecodeGL\Main.h expected constructor, destructor, or type conversion before "DECLARE"
39 C:\Docendo\Övningsfiler\Grundkod\3D\BasecodeGL\Main.h expected `,' or `;' before "DECLARE"
40 C:\Docendo\Övningsfiler\Grundkod\3D\BasecodeGL\Main.h `DECLARE' does not name a type
41 C:\Docendo\Övningsfiler\Grundkod\3D\BasecodeGL\Main.h `DECLARE' does not name a type
m.m.Sv: selectany-problem
#define DECLARE __declspec(selectany)Sv:selectany-problem
#define DECLARE __declspec(selectany)
DECLARE HDC hDC = NULL;
DECLARE HWND hWnd = NULL;
DECLARE RECT Window = NULL;
Det här fungerar inte trots initialiseringen, som tidigare så är "`selectany' attribute directive ignored"
Knepigt, knepigtSv: selectany-problem
Vet du exakt vad selectany gör?
Annars skulle jag rekommendera dig att köra utan det och istället använda dig av extern som man gör enligt standarden.Sv:selectany-problem
Låter som att det blir till å använda extern, hur kan det tänkas funka?
typ:
extern HDC hDC;Sv: selectany-problem
(iofs blev jag inte speciellt mycket klokare av den men...)Sv:selectany-problem
Dock så gör det inte så mycket; extern funkade bra så nu är det bara andra fel som återstår som inte har någonting med selectany att göra, så det får bli en annan tråd.Sv:selectany-problem