_vsnprintf' : undeclared identifier



  • Habe folgenes Prob.
    : error C2065: '_vsnprintf' : undeclared identifier
    : warning C4018: '!=' : signed/unsigned mismatch
    Error executing cl.exe.

    #include "menu.h"
    #pragma warning(disable: 4244)
    #pragma warning(disable: 4996)
    
    CIngameMenu c_Menu;
    
    void CIngameMenu::Init(IDirect3DDevice9* pDevice)
    {
    	// Menüeinträge in Klasse übernehmen
    	for (int i=0;i<ItemCount;i++) {Items[i] = MenuItems[i];}
    	iSelected = 0;
    	bActive = FALSE;
    	ToggleKey = MENUKEY;
    	// D3D Zeichenobjekt erstellen
    	D3DXCreateLine(pDevice, &menuLiner);
    	// D3D Font erstellen
    	D3DXCreateFont(pDevice, 12, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TEXT("Arial"), &menuFont );
    	bInited = TRUE;
    }
    
    void CIngameMenu::DeInit()
    {
    	// Zeichenobjekt löschen
    	menuLiner->Release();
    	// Font löschen
    	menuFont->Release();
    }
    
    void CIngameMenu::FillRGBA(int x, int y, int w, int h, int r, int g, int b, int a)
    {
    	D3DXVECTOR2 vLine[2];
    
    	// Zeichenobjekt einstellen
    	menuLiner->SetWidth(w);
    	menuLiner->SetAntialias(FALSE);
    	menuLiner->SetGLLines(TRUE);
    
    	vLine[0].x = x + w/2;
    	vLine[0].y = y;
    	vLine[1].x = x + w/2;
    	vLine[1].y = y + h;
    
    	// Zeichnen bzw. mit Farbe füllen
    	menuLiner->Begin( );
    	menuLiner->Draw( vLine, 2, D3DCOLOR_RGBA( r, g, b, a ) );
    	menuLiner->End( );
    }
    void CIngameMenu::DrawBox(int x, int y, int w, int h, int r, int g, int b, int a,int rr, int gg, int bb, int aa)
    {
    	FillRGBA(x,y+h,w,1,r,g,b,a);
    	FillRGBA(x-1,y,1,h,r,g,b,a);
    	FillRGBA(x,y-1,w,1,r,g,b,a);
    	FillRGBA(x+w,y,1,h,r,g,b,a);
    	FillRGBA(x,y,w,h,rr,gg,bb,aa);        // Body color
    }
    
    void CIngameMenu::DrawString(int x, int y, int Red, int Green, int Blue, int Alpha, const char *text, ...)
    {
    	D3DCOLOR fontColor = D3DCOLOR_ARGB(Alpha, Red, Green, Blue);  
    	RECT rect;
    	va_list va_alist;
    	char buf[256] = {0};	
    
    	rect.left=x; 
    	rect.top=y; 
    	rect.right=rect.left+1000; 
    	rect.bottom=rect.top+1000;
    
    	va_start (va_alist, text);
    	_vsnprintf (buf+strlen(buf), sizeof(buf) - strlen(buf), text, va_alist);
    	va_end (va_alist);
    
    	menuFont->DrawText(NULL, buf, -1, &rect, 0, fontColor );   
    }
    
    void CIngameMenu::Show()
    {
    	if (!bInited) return;
    	if(bActive)
    	{
    		int x = 35;    
    		int y = 10;
    		int r, g, b;
    		int mr, mg, mb;
    		int menur, menug, menub;
    
    		r = mr = mg = mb = 255;
    		g =	b = 0;
    		menur =	menug =	menub = 73;
    
    		DrawBox(x-10,y-5,170,(y-5)+(15*ItemCount)+15,255,255,240,255,menur,menug,menub,232);
    
    		for(int i=0;i<ItemCount;i++)
    		{
    			if(i!=iSelected)
    			{
    				DrawString(x,(y+15)+(15*i),mr,mg,mb,255,Items[i].Name);
    				DrawString(x+135,(y+15)+(15*i),mr,mg,mb,255,"%2.2f",Items[i].Value);
    			}
    			else
    			{
    				DrawString(x,(y+15)+(15*i),r,g,b,255,Items[i].Name);
    				DrawString(x+135,(y+15)+(15*i),r,g,b,255,"%2.2f",Items[i].Value);
    			}
    		}
    	}
    }
    
    void CIngameMenu::KeyCheck()
    {
    	if (!bInited) return;
    	if (GetAsyncKeyState(ToggleKey)&1){
    		bActive = !bActive;
    	}
    
    	// Wenn menü nicht angezeigt wird das hier nicht bearbeitet
    	if (bActive){
    		if (GetAsyncKeyState(VK_UP)&1){
    			if (iSelected > 0) iSelected--;
    		}else if (GetAsyncKeyState(VK_DOWN)&1){
    			if (iSelected < ItemCount-1) iSelected++;
    		}else if (GetAsyncKeyState(VK_LEFT)&1){
    			MenuItem* mi;
    
    			mi = &Items[iSelected];
    			if (mi->Value - mi->Step > mi->Min)
    			{
    				mi->Value = mi->Value - mi->Step;
    			}else{
    				mi->Value = mi->Min;
    			}
    			mi->Value = mi->Func(mi->Value);
    		}else if (GetAsyncKeyState(VK_RIGHT)&1){
    			MenuItem* mi;
    			mi = &Items[iSelected];
    			if (mi->Value < mi->Max)
    			{
    				mi->Value = mi->Value + mi->Step;
    				mi->Value = mi->Func(mi->Value);
    			}
    		}
    	}// Bis hier nur Menu
    
    }
    


  • ich habe auch so einige probleme. zum beispiel habe ich noch nie im lotto gewonnen



  • Warum bekommt man hier keine antworten?



  • auf welche frage?



  • TROLLALARM 😡



  • Habe folgenes Prob.
    : error C2065: '_vsnprintf' : undeclared identifier
    : warning C4018: '!=' : signed/unsigned mismatch
    Error executing cl.exe.

    Wie bekomme ich das weg



  • _vsnprintf gehört nicht zum Standard, da musst du schon in der Doku deines Compilers nachschauen, ob so eine Funktion unterstütz wird.
    In C++ ist es aber auch nicht zu empfehlen, VA Listen zu verwenden. Streaming wie bei cout ist da besser.

    Zu der Warnung, du solltest keine signed/unsigned Werte vergleichen. Entweder beide signed oder beide unsigned. Alles andere kann zu falschen Ergebnissen führen.



  • Wo kann ich die Doku den sehen?



  • hast du überhaupt die includes drin?



  • Ja das habe ich auch gemacht



  • Panse schrieb:

    Wo kann ich die Doku den sehen?

    Also spätestens HIER könnte Dir klar werden, warum niemand das beantworten kann: Woher soll irgendjemand hier besser wissen als Du ?

    Gruß,

    Simon2.



  • Panse schrieb:

    Wo kann ich die Doku den sehen?

    Keine Ahnung. Wir wissen ja noch nicht mal, welchen Compiler du verwendest. ZB bei GCC (MinGW) sollte die im info Verzeichnis sein.

    Ansonsten, durchsuche mal das include Verzeichnis, ob entsprechender Bezeichner überhaupt existiert.

    Btw, wie kommst du überhaupt auf _vsnprintf?





  • Angemerkt sei, dass dies nur für den MSC gilt. Und da es das Standard Forum ist, ist nur ISO/IEC 14882 relevant. _/vsnprintf ist jedenfalls nur compilerspezifisch implementiert. Alle unterstützten C Funktionen, auch die mit VA Listen, findet man übrigens unter C.2-7.



  • meines kleinen wissens nach, sind alle funktionen mit einem unterstrich, und darauffolgender kleinschreibung keine standardfunktionen.


Anmelden zum Antworten