J'ai récemment commencé à apprendre le c++ et j'essaie maintenant de créer une classe vectorielle simple comme exercice. Mais d'une manière ou d'une autre, mon code ne semble pas fonctionner.
#include <iostream>
#include <cmath>
class Vec2
{
public:
float x1;
float x2;
Vec2(float a,float b):x1(a),x2(b){}
float norm()
{
return sqrt(x1*x1+x2*x2);
}
Vec2 operator+(const Vec2 &v)
{
Vec2 newv;
newv.x1=this->x1+v.x1;
newv.x2=this->x2+v.x2;
return newv;
}
};
int main()
{
Vec2 v1(3,4);
Vec2 v2(4,5);
Vec2 v3=v1+v2;
std::cout << v1.x1 << std::endl;
std::cout << v1.norm() << std::endl;
std::cout << v3.x1 << std::endl;
return 0;
}
J'utilise eclipse comme éditeur et j'obtiens cette erreur lorsque je compile :
11:13:04 **** Incremental Build of configuration Debug for project Vec2 ****
make all
Building file: ../Vec2.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"Vec2.d" -MT"Vec2.o" -o "Vec2.o" "../Vec2.cpp"
../Vec2.cpp: In member function ‘Vec2 Vec2::operator+(const Vec2&)’:
../Vec2.cpp:15:11: error: no matching function for call to ‘Vec2::Vec2()’
Vec2 newv;
^~~~
../Vec2.cpp:8:2: note: candidate: Vec2::Vec2(float, float)
Vec2(float a,float b):x1(a),x2(b){}
^~~~
../Vec2.cpp:8:2: note: candidate expects 2 arguments, 0 provided
../Vec2.cpp:3:7: note: candidate: constexpr Vec2::Vec2(const Vec2&)
class Vec2
^~~~
../Vec2.cpp:3:7: note: candidate expects 1 argument, 0 provided
../Vec2.cpp:3:7: note: candidate: constexpr Vec2::Vec2(Vec2&&)
../Vec2.cpp:3:7: note: candidate expects 1 argument, 0 provided
make: *** [subdir.mk:20: Vec2.o] Error 1
11:13:05 Build Finished (took 422ms)
Je soupçonne que la surcharge de l'opérateur est le coupable ici, mais je n'arrive pas à le faire fonctionner. Toutes les idées seraient très appréciées!
Vous pouvez soit créer un constructeur par défaut
Vec2() {}
ou vous pouvez remplacer les lignes 15-17 par
Vec2 newv(this->x1+v.x1, newv.x2=this->x2+v.x2);
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots