Попытка вернуть вектор в частный вектор того же класса без функции возврата

#c 11

#c 11

Вопрос:

В настоящее время я работаю над проблемой обучения с подкреплением и пытаюсь добавить к позиции элемента fount в vector<State> и vector<Action> другого вектора с плавающей запятой в унаследованном классе, чтобы я мог манипулировать значениями состояния и действия fount . Возврат выполняется для другой функции в main, поэтому я не могу ее использовать. я пытаюсь использовать это-> но не работает.

Gradient.h

 class Gradient: virtual public Sarsa
{
public:
    Gradient();
    Gradient(float w);

    //states with weights
    std::vector<float> StateWeights(float s, float l, float a);

    //from the actions vector will be created with weights 
    std::vector<float> ActionWeights(Action a);
    void IsStateActionSeen();

private:

    float w0,w1,w2,w3,w4,w5,w6;

    std::vector<float> state_action_weights;
    std::vector<float> StatesPos;
    std::vector<float> Actions;
};
  

Gradintent.cpp

 //returns the possition and the values of state in floationg points
std::vector<float> Gradient::StateWeights(float s, float l, float a)
{   
    std::vector<float> StateW;
    //position of the state in the vector
    int x = Sarsa::StateisNow ( s,  l,  a);//here i take the values of the main to find which state is not
    float y = (float)(x);
    std::cout<<"State found: "<<x<<std::endl;
    //read the values of state from the position
    State st = all_states.at(x);
    std::cout<<"The State is: "<<st.get_pos()<<" "<<st.get_ang()<<" "<<st.get_spe()<<std::endl;
    //create a vector with the values of the state and the weights
    StateW={y, st.get_pos(),st.get_ang(),st.get_spe() };
    std::cout<<"The State is: "<<StateW.at(0)<<" "<<StateW.at(1)<<" "<<StateW.at(2)<<" "<<StateW.at(3)<<std::endl;
    this->StatesPos.push_back(amp;StateW);//i want to add it in the vector before it returns
    return StateW;//return to the main
}
  

ошибка: нет соответствующей функции для вызова ‘std::vector::push_back(std::vector*)’
this->StatesPos.push_back(amp;StateW);

Ответ №1:

StatePos является вектором с плавающей запятой, вы можете возвращать только значения с плавающей запятой (или объекты, которые будут неявно преобразованы в значения с плавающей запятой.

Если вам нужно добавить два вектора, вы можете сделать что-то вроде этого:

 StatePos.insert( StatePos.end(), StateW.begin(), StateW.end() ); 
  

Комментарии:

1. я пробовал это, и перемещение R_X86_64_PC32 против неопределенного скрытого символа `_ZTC8Gradient112_5Sarsa’ не может быть использовано при создании общего объекта / usr /bin /ld: ошибка окончательной ссылки: неверное значение collect2: ошибка: ld вернул 1 статус выхода

2. Вам не хватает ссылки на какую-то библиотеку. Это еще одна проблема, но если вы находитесь на стадии компоновки, то компиляция завершается успешно.

3. Я думаю, проблема в перегрузке. когда я комментирую //StatesPos.insert( StatesPos.end(), StateW.begin(), StateW.end() ); все работает нормально. я знаю, что это проблема, которую я опубликовал, но считаете ли вы, что это проблема среды? где я должен это проверить?