2011-09-09 35 views
0

你好我一直在試圖解決我一直在使用我目前正在使用的代碼的問題。我看過其他帖子,但找不到任何相關的內容。 基本上,我添加了所有必要的文件:頭文件和源文件,但仍然出現錯誤。其中之一是「'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:

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

文件,其中我打電話給我的功能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]); 
     } 

這件事讓我發瘋,但我確信這是我看不到的東西。 在此先感謝。

回答

2

您正在使用一個沒有實例的成員函數。您需要創建一個對象,然後調用它的對象:

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

您只能使用純SetValue(something)當你在具有成員SetValue類的成員函數,在這種情況下,它是this->SetValue(something)的簡寫。這樣編譯器就知道你在說什麼對象。

更不用說您的大小寫 是錯誤的。

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

setValue =>S應該從頭是上殼體的方法調用。

+0

感謝您指出,但錯誤仍顯示出來。 – GKED

+0

我以爲這個調用是從繼承的類的範圍進行的。所以,'CDoubleVector'和'Variogram'之間沒有關係。 – Mahesh

相關問題