Je travaille sur un projet DLL, j'écris une classe avec des variables et des fonctions dans un en-tête et les définitions dans un fichier .cpp comme ceci:
.h:
#ifndef RE_MATH_H
#define RE_MATH_H
#ifdef MATHFUNCSDLL_EXPORTS
#define RE_MATH_API __declspec(dllimport)
#else
#define RE_MATH_API __declspec(dllexport)
#endif
#define PI 3.14159265358979323846
namespace RE_Math
{
class RE_MATH_API Point
{
public:
double X;
double Y;
double Z;
float alpha;
Point(double x, double y, double z, float a);
static void getPoint(double x, double y, double z, float a);
};
}
et le .cpp:
#include <re_math.h>
namespace RE_Math
{
Point::Point(double x, double y, double z, float a)
{
X = x;
Y = y;
Z = z;
alpha = a;
}
void Point::getPoint(double x, double y, double z, float a)
{
x = X;
y = Y;
z = Z;
a = alpha;
}
}
OK, donc dans le constructeur, je n'ai aucun problème, mais dans la getPoint()
fonction j'obtiens l'erreur "la référence de membre non statique doit être relative à un objet spécifique" et cela ne me permettra pas d'utiliser les variables. J'ai essayé de rendre les variables statiques, mais cela me donne des erreurs de symboles externes non résolues aux mêmes endroits, dans getPoint (). Que dois-je faire pour résoudre ce problème?
ça ne me laissera pas utiliser les variables
Vous ne pouvez pas accéder X
, Y
, Z
et à alpha
partir Point::getPoint
parce que la getPoint
fonction est statique. Une fonction membre statique ne peut pas accéder aux membres de données d'instance, mais elle peut accéder static
aux membres de classe.
J'ai essayé de rendre les variables statiques, mais cela me donne des erreurs de symboles externes non résolues
Vous ne pouvez pas rendre les membres statiques en ajoutant simplement le static
mot - clé, vous devez également les définir (par exemple, double Point::X;
).
Que dois-je faire pour résoudre ce problème?
Rendez la getPoint
fonction non statique et mettez-la à jour pour utiliser des références.
void Point::getPoint(double& x, double& y, double& z, float& a)
{
x = X;
y = Y;
z = Z;
a = alpha;
}
Si vous n'utilisez pas de références pour les paramètres, les modifications sont perdues une fois la fonction terminée car les paramètres sont passés par valeur (c'est-à-dire, ce sont des copies des originaux), ce qui modifie des variables temporaires qui n'existent que dans le cadre de la getPoint
fonction .
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