Warning C4018 und C4100 bei Vektoren



  • Hi Leute!
    Ich bin schon öfters über die folgenden Meldungen bei der Verwendung von STL Vektoren mit VC++ 6 gestoßen:

    C:\ARBEIT\VC98\INCLUDE\vector(156) : warning C4018: '<' : Konflikt zwischen signed und unsigned
    D:\ARBEIT\VC98\INCLUDE\vector(156) : Bei der Kompilierung der Member-Funktion 'void __thiscall std::vector<unsigned int,class std::allocator<unsigned int> >::insert(unsigned int *,unsigned int,const unsigned int &)' der Klassenvorlage
    D:\ARBEIT\VC98\INCLUDE\vector(167) : warning C4018: '<' : Konflikt zwischen signed und unsigned
    D:\ARBEIT\VC98\INCLUDE\vector(156) : Bei der Kompilierung der Member-Funktion 'void __thiscall std::vector<unsigned int,class std::allocator<unsigned int> >::insert(unsigned int *,unsigned int,const unsigned int &)' der Klassenvorlage
    D:\ARBEIT\VC98\INCLUDE\xmemory(37) : warning C4100: '_P' : Unreferenzierter formaler Parameter
    D:\ARBEIT\VC98\INCLUDE\xmemory(68) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl std::_Destroy(unsigned int *)'

    Das Programm kompiliert sauber, aber die Warnungen sind doch irgendwie Merkwürdig. Die Definition der Vektoren sieht im aktuellen Programm so aus:

    std::vector<char> fieldsX;
    std::vector<char> fieldsY;
    

    Und das ist meiner Meinung nach sauberer Code...



  • #include <vector>
    
    using namespace std;
    
    int main()
    {
    	vector<char> fieldsX;
    	vector<char> fieldsY;
    
    	return 0;
    }
    

    oder

    #include <vector>
    
    int main()
    {
    	std::vector<char> fieldsX;
    	std::vector<char> fieldsY;
    
    	return 0;
    }
    


  • Was will der Künstler uns sagen?

    Ich habe die beiden Vektoren als Membervariablen einer Klasse definiert.



  • Hat keiner einen Vorschlag? Ich habe den letzen Post wirklich nicht verstanden...



  • Wie wäre es mal wenn du die richtigen Stellen zeigst? Zum Beispiel da wo du insert benutzt.



  • Ich benutze push_back() und das nur an einer Stelle

    void MovableFields::AddField(char x, char y, bool mayMove) {
    	if(x >= 0 && x < 8 && y >= 0 && y < 8)
    		if(mayMove == true)
    		{
    			fieldsX.push_back(x);
    			fieldsY.push_back(y);
    		}
    }
    


  • Also ich bekomme hierbei keine Fehler. (Visual C++ 6)

    #include <vector>
    
    int main()
    {
        std::vector<char> fieldsX;
        char x = 'A';
        fieldsX.push_back(x);
        return 0;
    }
    

    Und du?



  • Vielleicht liegt es daran, dass die Vektoren Membervariablen der Klasse sind. Ich brauch das aber unbedingt...



  • Als Membervariablen kommt auch kein Fehler/Warnung.

    #include <vector>
    
    class Bla
    {
    public:
    	void move(char x)
    	{
    		fieldsX.push_back(x);
    	}
    private:
    	std::vector<char> fieldsX;
    };
    
    int main()
    {
        Bla bla;
        bla.move('X');
        return 0;
    }
    

    Mach einfach so ein kleines Testprogramm wie ich das das Verhalten aufzeigt.


Anmelden zum Antworten