2011-09-09 4 views
0

Bonjour J'ai essayé de résoudre le problème que j'ai rencontré avec le code sur lequel je travaille en ce moment. J'ai regardé d'autres messages mais je n'ai rien trouvé de pertinent. Fondamentalement, j'ai ajouté tous les fichiers nécessaires: l'en-tête et les fichiers source, mais toujours des erreurs. L'un d'entre eux est "'setValue': identifier not found". Pour une raison quelconque, il ne reconnaît aucune des fonctions de mon fichier d'en-tête. De toute façon, voici la partie du code qui se rapporte à l'erreur. Je ne peux pas montrer tout le code comme énorme:Même ancien identificateur introuvable erreur en C++

tête DoubleVector.h:

#pragma once 
    #pragma warning(disable : 4251) 

    #ifndef DOUBLEVECTOR_H_ 
    #define DOUBLEVECTOR_H_ 

    #define _USE_MATH_DEFINES // need to use M_PI 
    #include <math.h> 
    #include "PMath.h" 

// whole bunch of constructors and functions declarations, which I won't show 

// this is one of the functions that's causing trouble 
    void SetValue(long index,double val); 

Source DoubleVector.cxx:

void CDoubleVector::SetValue(long index,double val) 
{ 
    if(index < 0 || index >= m_nSize) 
    { 
     //string message("Index out of range of vector."); 
     //throw PMathError(message); 
     throw PMathError("Error: index(%d) out of range. <- void SetValue(long index, double val) in DoubleVector.cxx",index); // tested 
    } 

    m_pData[index] = val; 
} 

fichier où je vous appelle mes fonctions variogram.cc :

#include "variogram.h" 
#include "DoubleVector.h" 


    void Variogram::estimate() { 

     base_multimin_function_fdf fdf; 

     fdf.n = _spatialCorrFunc.param.size(); 

     fdf.f = &minimizationf; 
     fdf.df = &minimizationfd; 
     fdf.fdf = &minimizationfdf; 
     fdf.params = this; 
     long iter = 0; 
     int status; 
     //gsl_vector *x = gsl_vector_alloc(fdf.n); 

     for (int i = 0; i < fdf.n; ++i) { 
      if(i < 3) 


    //gsl_vector_set(x, i, sqrt(_spatialCorrFunc.param[i])); 
     //Greg: void SetValue(long index, double val) as an alternative //to gsl_vector_set(...) 
      SetValue(i,sqrt(_spatialCorrFunc.param[i])); 
      else//kappa 
      SetValue(i, _spatialCorrFunc.param[i]); 
     } 

Cette chose me rend fou, mais je suis sûr qu'il est quelque chose de stupide que je ne vois pas. Merci d'avance.

Répondre

2

Vous utilisez une fonction membre sans instance. Vous devez créer un objet, puis l'appeler sur cet objet:

CDoubleVector dv; 
... 
dv.SetValue(i, sqrt(_spatialCorrFunc.param[i])); // etc 

Vous ne pouvez utiliser la SetValue(something) plaine quand vous êtes à l'intérieur une fonction membre de la classe qui a le membre SetValue, auquel cas c'est un raccourci pour this->SetValue(something). De cette façon, le compilateur sait de quel objet vous parlez. Pour ne pas mentionner votre capitalisation est était faux.

3
void SetValue(long index,double val); // Notice that beginning `S` is uppercase. 

setValue =>S doit être en majuscules au début dans les méthodes appellent.

+0

Merci de l'avoir signalé mais l'erreur persiste. – GKED

+0

Je pensais que l'appel est fait avec la portée de la classe héritée. Donc, il n'y a pas de relation entre 'CDoubleVector' et' Variogram'. – Mahesh

Questions connexes