2011-09-09 16 views
0

こんにちは私は、私が現在取り組んでいるコードで問題を解決しようとしています。私は他の投稿を見てきましたが、関連するものは何も見つかりませんでした。 基本的に、私は必要なすべてのファイルを追加しました:ヘッダーとソースファイルが、まだエラーを取得します。多くのうちの1つは "'setValue': identifier not found"です。何らかの理由で、私のヘッダーファイルの関数を認識しません。 とにかく、エラーに関連するコードの部分があります。C++で同じ古い識別子が見つかりません

ヘッダー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); 

出典DoubleVector.cxx:私は私の関数variogram.ccを呼び出しています

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; 
} 

ファイル私はその巨大なようにすべてのコードを表示することはできません:

#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]); 
     } 

この事は狂気私を運転しているが、私はそれは私が見ていないよという愚かなものだと確信しています。 ありがとうございます。

答えて

2

インスタンスを持たないメンバー関数を使用しています。あなたは、オブジェクトを作成し、そのオブジェクトにそれを呼び出す必要があります。

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

あなたがメンバーSetValueを持つクラスで内側部材の機能しているときにのみ、その場合には、プレーンなSetValue(something)を使用することができますthis->SetValue(something)の省略形です。そうすれば、コンパイラはあなたがどのオブジェクトについて話しているかを知ることができます。

大文字は言うまでもありませんが です。

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

setValue =>Sメソッド呼び出しの先頭に大文字でなければなりません。

+0

それを指摘していただきありがとうございますが、まだエラーが表示されます。 – GKED

+0

私は、呼び出しが継承クラスのスコープから行われたと考えました。したがって、 'CDoubleVector'と' Variogram'との間には関係がありません。 – Mahesh

関連する問題