J'utilise CodeBlocks pour C++ et c'est probablement un problème de compilateur. J'apprends en utilisant le pointeur de vecteur et ai essayé de créer la fonction qui retourne le pointeur de vecteur. Voici mon code. Il a compilé et exécuté avant sans utiliser de pointeur. Maintenant j'essaye d'avoir une fonction qui renvoie le pointeur, mais d'une manière ou d'une autre cela ne fonctionne pas et je n'ai pas pu comprendre les erreurs. S'il vous plaît aider.Problème du compilateur CodeBlocks, C++
erreur:
main.cpp|8|undefined reference to `RandomNum::RandomNum(int, int, int, int)
main.cpp|9|undefined reference to `RandomNum::getVecPointer()
main.cpp
#include <iostream>
#include "RandomNum.h"
using namespace std;
int main()
{
RandomNum rand(5, 5, 100, 1000); <----error
vector<float>* p = rand.getVecPointer();
cout << (*p)[0] << endl;
return 0;
}
RandomNum.h
#include <vector>
#ifndef RANDOMNUM_H
#define RANDOMNUM_H
class RandomNum
{
private:
int M, x, y, z; //M is the number of cells
std::vector <float> aVector;
public:
//constructor
RandomNum(int, int, int, int);
//generate random float between 0 and 1;
float unif();
//build a vector of random points
std::vector<float>* getVecPointer();
};
#endif
RandomNum.cpp
#include "RandomNum.h"
#include <cmath> //for trunc()
RandomNum::RandomNum(int MM,int xx, int yy, int zz)
{
//x, y, z are seeds, M is the number of random numbers to be generated [0,1]
M = MM;
x = xx;
y = yy;
z = zz;
}
float RandomNum::unif()
{
float tmp;
...
return(tmp - trunc(tmp));
}
std::vector<float>* RandomNum::getVecPointer()
{
int i ;
for (i = 0 ; i < M; i++)
{
float x = unif();
aVector.push_back(x);
}
return &aVector;
}
Tout d'abord, vous * do * construire avec le fichier 'RandomNum.cpp', et créer un lien avec le fichier objet qu'il génère? Deuxièmement, la chose «normale» est de renvoyer une * référence * à la place d'un pointeur, ce qui rend l'utilisation plus facile, par ex. l'opérateur d'indexation. Troisièmement, le nom 'getVecPointer' est un peu trompeur, la fonction ne renvoie pas seulement * * un pointeur vers le vecteur, elle le remplit aussi avec des données. –
Plus précisément, quelque chose comme 'g ++ -c RandomNum.cpp && g ++ -o principal main.cpp RandomNum.o' (ajuster pour le compilateur/plate-forme). –
S'il vous plaît partager les détails de la façon dont vous construisez ce code. Il y a probablement une erreur de liaison dans votre implémentation. –