Тот же старый идентификатор не найден ошибка в C ++ - PullRequest
0 голосов
/ 09 сентября 2011

Здравствуйте, я пытался решить проблему, с которой столкнулся с кодом, над которым я сейчас работаю.Я просмотрел другие посты, но не смог найти что-то актуальное.В основном я добавил все необходимые файлы: заголовочные и исходные файлы, но все равно получаю ошибки.Одним из многих является "'setValue': identifier not found".По какой-то причине он не распознает ни одну из функций из моего заголовочного файла.В любом случае, вот часть кода, которая относится к ошибке.Я не могу показать весь код как его огромный:

Заголовок 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 ]

3 голосов
/ 09 сентября 2011
void    SetValue(long index,double val); // Notice that beginning `S` is uppercase.

setValue => S должен начинаться с верхнего регистра в начале вызова методов.

2 голосов
/ 09 сентября 2011

Вы используете функцию-член без экземпляра.Вам нужно создать объект и затем вызвать его для этого объекта:

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

Вы можете использовать обычный SetValue(something), только когда вы внутри функции-члена в классе, которыйимеет член SetValue, в этом случае это сокращение для this->SetValue(something).Таким образом, компилятор знает, о каком объекте вы говорите.

Не говоря уже о том, что ваша заглавная буква - это неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...