Intruder
Dec. 24, 2020, 2 a.m.

Почему вылетает ошибка: C:\DEVELOPMENT\Qt5.12.9\5.12.9\mingw73_64\include\QtCore\qvector.h:687: ошибка: cannot bind non-const lvalue reference of type 'AltIdent&' to an rvalue of type 'std::remove_ref

Всем доброго времени суток.
Помогите разобраться, что я делаю не так?
Есть несколько классов. Вот они:

  1. class AltIdent
  2. {
  3. public:
  4. AltIdent();
  5. AltIdent(const AltIdent &);
  6. AltIdent(PartNumber partnumber, ManufacturerCode manufacturercode);
  7. ~AltIdent(){}
  8.  
  9. PartNumber getPartNumberObject() const;
  10. void setPartNumberObject(const PartNumber &value);
  11.  
  12. ManufacturerCode getManufacturerCodeObject() const;
  13. void setManufacturerCodeObject(const ManufacturerCode &value);
  14.  
  15. bool isEmpty();
  16. AltIdent *isNull();
  17. AltIdent operator= (AltIdent &altident);
  18.  
  19. private:
  20. PartNumber partNumberObject;
  21. ManufacturerCode manufacturerCodeObject;
  22. };
  23.  
  24. #include "altident.h"
  25.  
  26. AltIdent::AltIdent()
  27. {
  28.  
  29. }
  30.  
  31. AltIdent::AltIdent(const AltIdent &altident)
  32. {
  33. partNumberObject = altident.getPartNumberObject();
  34. manufacturerCodeObject = altident.getManufacturerCodeObject();
  35. }
  36.  
  37. AltIdent::AltIdent(PartNumber partnumnber, ManufacturerCode manufacturercode):
  38. partNumberObject(partnumnber), manufacturerCodeObject(manufacturercode)
  39. {
  40.  
  41. }
  42.  
  43. PartNumber AltIdent::getPartNumberObject() const
  44. {
  45. return partNumberObject;
  46. }
  47.  
  48. void AltIdent::setPartNumberObject(const PartNumber &value)
  49. {
  50. partNumberObject = value;
  51. }
  52.  
  53. ManufacturerCode AltIdent::getManufacturerCodeObject() const
  54. {
  55. return manufacturerCodeObject;
  56. }
  57.  
  58. void AltIdent::setManufacturerCodeObject(const ManufacturerCode &value)
  59. {
  60. manufacturerCodeObject = value;
  61. }
  62.  
  63. bool AltIdent::isEmpty()
  64. {
  65. if(isNull() != nullptr){
  66. if(!getPartNumberObject().isEmpty()){
  67. return false;
  68. }
  69. if(!getManufacturerCodeObject().isEmpty()){
  70. return false;
  71. }
  72. }
  73. return true;
  74. }
  75.  
  76. AltIdent *AltIdent::isNull()
  77. {
  78. AltIdent *altIdent = this;
  79. if(altIdent != nullptr){
  80. return this;
  81. }
  82. return nullptr;
  83. }
  84.  
  85. AltIdent AltIdent::operator=(AltIdent &altident)
  86. {
  87. return *new AltIdent(altident.getPartNumberObject(), altident.getManufacturerCodeObject());
  88. }
  89.  
  1. class PartNumber
  2. {
  3. public:
  4. PartNumber();
  5. PartNumber(const PartNumber &);
  6. PartNumber(const QString &partNumberStr, const QMap<QString, QString> &attrMap);
  7. ~PartNumber(){}
  8.  
  9. QString getPartNumberValue() const;
  10. void setPartNumberValue(const QString &value);
  11.  
  12. QMap<QString, QString> getPartNumberAttrMap() const;
  13. void setPartNumberAttrMap(const QMap<QString, QString> &value);
  14.  
  15. bool isEmpty();
  16. PartNumber *isNull();
  17.  
  18. private:
  19. QString partNumberValue;
  20. QMap<QString, QString> partNumberAttrMap;
  21. };
  22.  
  23. #include "partnumber.h"
  24.  
  25. PartNumber::PartNumber()
  26. {
  27.  
  28. }
  29.  
  30. PartNumber::PartNumber(const PartNumber &partnumber)
  31. {
  32. partNumberValue = partnumber.getPartNumberValue();
  33. partNumberAttrMap = partnumber.getPartNumberAttrMap();
  34. }
  35.  
  36. PartNumber::PartNumber(const QString &partNumberStr, const QMap<QString, QString> &attrMap) :
  37. partNumberValue(partNumberStr), partNumberAttrMap(attrMap)
  38. {
  39.  
  40. }
  41.  
  42. QMap<QString, QString> PartNumber::getPartNumberAttrMap() const
  43. {
  44. return partNumberAttrMap;
  45. }
  46.  
  47. void PartNumber::setPartNumberAttrMap(const QMap<QString, QString> &value)
  48. {
  49. partNumberAttrMap = value;
  50. }
  51.  
  52. QString PartNumber::getPartNumberValue() const
  53. {
  54. return partNumberValue;
  55. }
  56.  
  57. void PartNumber::setPartNumberValue(const QString &value)
  58. {
  59. partNumberValue = value;
  60. }
  61.  
  62. bool PartNumber::isEmpty()
  63. {
  64. if(isNull() != nullptr && !partNumberValue.isEmpty()){
  65. return false;
  66. }
  67. return true;
  68. }
  69.  
  70. PartNumber *PartNumber::isNull()
  71. {
  72. PartNumber *partNumber = this;
  73. if(partNumber != nullptr){
  74. return this;
  75. }
  76. return nullptr;
  77. }
  1. class ManufacturerCode
  2. {
  3. public:
  4. ManufacturerCode();
  5. ManufacturerCode(const ManufacturerCode &);
  6. ManufacturerCode(const QString &manufacturerCode, const QMap<QString, QString> &attrMap);
  7. ~ManufacturerCode(){}
  8.  
  9. QMap<QString, QString> getManufacturerCodeAttrMap() const;
  10. void setManufacturerCodeAttrMap(const QMap<QString, QString> &value);
  11.  
  12. QString getManufacturerCodeValue() const;
  13. void setManufacturerCodeValue(const QString &value);
  14.  
  15. QDomElement manufacturerCodeToXml(QDomDocument &domdocument);
  16. void manufacturerCodeFromXml(QDomElement &domelement);
  17.  
  18. bool isEmpty();
  19. ManufacturerCode *isNull();
  20.  
  21. private:
  22. QString manufacturerCodeValue;
  23. QMap<QString, QString> manufacturerCodeAttrMap;
  24.  
  25. };
  26.  
  27. #include "manufacturercode.h"
  28.  
  29. ManufacturerCode::ManufacturerCode()
  30. {
  31.  
  32. }
  33.  
  34. ManufacturerCode::ManufacturerCode(const ManufacturerCode &manufacturercode)
  35. {
  36. *this = manufacturercode;
  37. }
  38.  
  39. ManufacturerCode::ManufacturerCode(const QString &manufacturerCode,const QMap<QString, QString> &attrMap) :
  40. manufacturerCodeValue(manufacturerCode), manufacturerCodeAttrMap(attrMap)
  41. {
  42.  
  43. }
  44.  
  45. QMap<QString, QString> ManufacturerCode::getManufacturerCodeAttrMap() const
  46. {
  47. return manufacturerCodeAttrMap;
  48. }
  49.  
  50. void ManufacturerCode::setManufacturerCodeAttrMap(const QMap<QString, QString> &value)
  51. {
  52. manufacturerCodeAttrMap = value;
  53. }
  54.  
  55. QString ManufacturerCode::getManufacturerCodeValue() const
  56. {
  57. return manufacturerCodeValue;
  58. }
  59.  
  60. void ManufacturerCode::setManufacturerCodeValue(const QString &value)
  61. {
  62. manufacturerCodeValue = value;
  63. }
  64.  
  65. bool ManufacturerCode::isEmpty()
  66. {
  67. if(isNull() != nullptr && !manufacturerCodeValue.isEmpty()){
  68. return false;
  69. }
  70. return true;
  71. }
  72.  
  73. ManufacturerCode *ManufacturerCode::isNull()
  74. {
  75. ManufacturerCode *manufacturerCode = this;
  76. if(manufacturerCode != nullptr){
  77. return this;
  78. }
  79. return nullptr;
  80. }

В другом файле сосздаю вектор:

  1. AltIdent m_altIdentOrigin;
  2. AltIdent m_altIdentCurrent;
  3. QVector<AltIdent> m_altIdentList;

На кнопку QPushButton повесил обработчик, который должен по индексу присвоить переменной m_altIdentCurrent элемент массива

  1. void AltIdentGroupWidget::previewItem(const int &index)
  2. {
  3. m_altIdentOrigin = m_altIdentList.at(index);
  4. }

Но при компиляции получаю следующие ошибки:
1. C:\DEVELOPMENT\Qt5.12.9\5.12.9\mingw73_64\include\QtCore\qvector.h:687: ошибка: cannot bind non-const lvalue reference of type 'AltIdent&' to an rvalue of type 'std::remove_reference ::type {aka AltIdent}'
d->end() = qMove(copy);
2. C:\DEVELOPMENT\Qt5.12.9\5.12.9\mingw73_64\include\QtCore\qvector.h:693: ошибка: binding reference of type 'AltIdent&' to 'const AltIdent' discards qualifiers
d->end() = t;
~~~~~~~~~~^~~

И я не могу разобраться, что я делаю не так?
Помогите разобраться, пожалуйста.

1
1
Intruder
  • Dec. 24, 2020, 2:05 a.m.

Еще у меня вопрос. Правильно ли я написал конструктор копирования и перегрузил операцию присваивания?

    Comments

    Only authorized users can post comments.
    Please, Log in or Sign up
    • Last comments
    • AK
      April 1, 2025, 11:41 a.m.
      Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
    • Evgenii Legotckoi
      March 9, 2025, 9:02 p.m.
      К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
    • VP
      March 9, 2025, 4:14 p.m.
      Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
    • ИМ
      Nov. 22, 2024, 9:51 p.m.
      Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
    • Evgenii Legotckoi
      Oct. 31, 2024, 11:37 p.m.
      Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup