Необъявленная ошибка идентификатора, но переменная определена правильно (?)

Я уже некоторое время использую одни и те же файлы, но внезапно внося некоторые другие изменения, эта ошибка начала появляться

constraints.cpp:105:5: ошибка: использование необъявленного идентификатора 'constraintViolated'; 'constraintViolated' не был объявлен в области действия

Что такое ошибка "необъявленный идентификатор" и как это исправить?

Я следил за несколькими ответами в приведенной выше ветке, но в моем случае они не казались актуальными. Я не уверен, есть ли что-то еще, вызывающее это. Ясно, что я объявил переменные в заголовке, но они, похоже, не были прочитаны в файле cpp. На самом деле, есть и другие переменные, которые делают то же самое, но я ограничу свой пример этим. Раньше код работал отлично, но некоторые незначительные изменения привели к появлению этой ошибки. Может проблема в сборке?

Я попытался добавить весь соответствующий код. Код ниже,

constraints.cpp

namespace tudat{


Constraint::Constraint(std::string filenameForConstraintData){

    constraintViolated = 0;
    constraintLengthVehicle = 0.0;
    constraintDiameterVehicle = 2.44;

}

void checkVehicleConstraints(int launchVehicleType, int numberOfStages, double lengthVehicle, double diameterVehicle,  Eigen::Vector3d  diameterMotorCaseStage,
 Eigen::Vector3d diameterNozzleExitStage, Eigen::Vector3d lengthMotorCaseStage){

    constraintViolated = 0;
    constraintLengthVehicle = 25.0;
    constraintDiameterVehicle = 2.44;

if (totalLengthOfTheVehicle/diameterMotorCaseStage1 > maxLOverDRatio){
        constraintViolated = 1;
        if (printConstraints_ == 1){
           std::cout<< "Length is"<< totalLengthOfTheVehicle << std::endl;
                   }
    }
}
constraints.h

namespace tudat
{
class Constraint{
public:

    Constraint(std::string filenameForConstraintData);

    int getConstraintViolated(){ return constraintViolated; }

//    void checkTrajectoryConstraints(const std::vector< tudat::basic_astrodynamics::AccelerationModel3dPointer > listOfAccelerationsActingOnLaunchVehicle,
//                                    const boost::shared_ptr< tudat::RocketLaunchVehicle > launchVehicle,
//                                    const boost::shared_ptr< EnvironmentUpdater > environmentUpdater);


    // void checkVehicleConstraints(int launchVehicleType, int numberOfStages, double lengthVehicle, double diameterVehicle,
                                 // double diameterMotorCaseStage1, double diameterMotorCaseStage2, double diameterMotorCaseStage3,// double diameterMotorCaseStage4,
                                 // double diameterNozzleExitStage1,double diameterNozzleExitStage2, double diameterNozzleExitStage3, // double diameterNozzleExitStage4,
                                 /* double vacuumThrustStage1, double massStartStage1, double deltaVVehicle, double vacuumThrfustStage3, */
                                 // double lengthMotorCaseStage1, double lengthMotorCaseStage2, double lengthMotorCaseStage3 ); //, double lengthMotorCaseStage4);

    void checkVehicleConstraints(int launchVehicleType, int numberOfStages, double lengthVehicle, double diameterVehicle,
                                Eigen::Vector3d diameterMotorCaseStage,
                                Eigen::Vector3d diameterNozzleExitStage, 
                                Eigen::Vector3d lengthMotorCaseStage); 

private:
    int constraintViolated;
    int printConstraints_;




person Rajath Pai    schedule 03.01.2020    source источник


Ответы (1)


Используйте модификатор разрешения области, чтобы сообщить компилятору, что ваша реализация checkVehicleConstraints принадлежит Constraint, поскольку вы не находитесь в классе в своем constraints.cpp:

void Constraint::checkVehicleConstraints(int launchVehicleType, ...

Таким образом, он получит доступ к закрытым членам Constraint.

person Klaycon    schedule 03.01.2020
comment
Спасибо. Я сделал это ранее и забыл объявить это снова во время модификации. - person Rajath Pai; 03.01.2020