2017-10-07 24 views
-3

J'essaie d'apprendre le C++ et je crée une classe Vector2. J'ai cette fonction ToString() dans ma classe Vector2 qui me permettrait d'imprimer un Vector2 à l'écran.C++ impression d'une classe const statique

J'ai aussi cette variable const Vector2 appelée, et je veux aussi les imprimer en utilisant cette fonction ToString() Mais ça donne une erreur. Ceci est l'implémentation de Vector2 :: up en .h et .cpp

Lorsque je stocke le Vector2 :: up dans un vec Vector2 et l'imprime comme vec.ToString(), cela fonctionne. Mais quand j'essaie d'imprimer Vector :: up.ToString() ça ne marche pas.

C'est ce qui est dans ma classe Vector2, la fonction Vector2 :: up et la fonction ToString().

"Vector2.h" 

static const Vector2 up; 

std::string ToString (int = 2); 


"Vector2.cpp" 

const Vector2 Vector2::up = Vector2 (0.f, 1.f); 

std::string Vector2::ToString (int places) 
{ 
    // Format: (X, Y) 
    if (places < 0) 
     return "Error - ToString - places can't be < 0"; 
    if (places > 6) 
     places = 6; 

    std::stringstream strX; 
    strX << std::fixed << std::setprecision (places) << this->x; 
    std::stringstream strY; 
    strY << std::fixed << std::setprecision (places) << this->y; 

    std::string vecString = std::string ("(") + 
          strX.str() + 
          std::string (", ") + 
          strY.str() + 
          std::string (")"); 

    return vecString; 
} 

Ce que je voudrais faire dans ma fonction principale

"Main.cpp" 

int main() 
{ 
    Vector2 vec = Vector2::up; 
    cout << vec.ToString() << endl; 
    cout << Vector2::up.ToString() << endl; 

    cout << endl; 
    system ("pause"); 
    return 0; 
} 

Et je les aime à la fois l'impression (0.00, 1.00), mais le Vector2 :: up.ToString() donne un erreur

1>c:\users\jhehey\desktop\c++\c++\main.cpp(12): error C2662: 'std::string JaspeUtilities::Vector2::ToString(int)': cannot convert 'this' pointer from 'const JaspeUtilities::Vector2' to 'JaspeUtilities::Vector2 &' 
+4

Affichez un [MCVE]. Ne postez pas d'images de code. –

+0

Copiez et collez le code et le message d'erreur! –

+0

Je l'ai édité et posté le code pour mon ToString() –

Répondre

1

Comme Vector::up est déclaré const, vous ne pouvez accéder aux fonctions de membres qui sont déclarées const. Alors que Vector2::ToString ne modifie pas réellement le vecteur, vous ne l'avez pas déclaré const. Pour ce faire, déclarez-le comme ceci: std::string ToString (int places) const;

+0

merci beaucoup, cela a fonctionné. –