#c
#c
Вопрос:
Лучшее, что я знаю, конструктор имеет тип void. Учитывая код, указанный ниже, почему редактор Visual Studio 2019 помечает указанный вызов конструктора предупреждением C26444?
Вот соответствующий исходный код реализации:
#pragma once
#include "Class_dB_CG.h"
CG::CG() {}
CG::~CG() {}
CG::CG(const CGamp; rhs) {}
CG::CG(ER* e)
{
CG(); ***//warning on this line***
er = e;
}
**The header file is here:**
#pragma once
#include "Class_dB_ER.h"
class CG
{
private:
ER* er = 0;
public:
CG();
~CG();
CG(const CGamp; rhs);
CG(ER* e);
};
Комментарии:
1. Я не получаю никаких предупреждений: rextester.com/ZYTKF38159
2. Согласно learn.microsoft.com/en-us/cpp/code-quality/c26444?view=vs-2019 C26444 означает «Неназванные (то есть временные) объекты с нетривиальным поведением могут указывать на … неэффективный код, который выделяет и немедленно выбрасывает ресурсы» Таким образом, вы создаете объект temporart и не присваиваете его переменной, чтобы он немедленно уничтожался.
3. когда вы получаете предупреждение или ошибку в определенной строке столбце, это означает, что проблема находится на этой позиции или перед ней. В вашем случае это, вероятно, перед этой строкой (в типе ER)
4. пожалуйста, укажите содержимое «Class_dB_ER.h»
Ответ №1:
В этом коде:
CG::CG(ER* e)
{
CG(); // warning on this line
er = e;
}
вы не вызываете конструктор. Вы просто создаете временный объект, который отбрасывается. Вероятно, это то, на что ссылается предупреждение.
Если вы хотите вызвать конструктор, вы можете сделать это следующим образом:
CG::CG(ER* e) : CG()
{
er = e;
}
Комментарии:
1. не согласен с вами. Но при использовании ER в качестве псевдонима для int предупреждения нет. Предупреждение должно иметь какое-то отношение к типу ER (который мы не знаем)
2. @engf-010 Упс, я пытался
int
и забыл изменить его обратно наER
. Исправлено, спасибо. Я бы сказал, что это должно быть предупреждение независимо от того, чтоER
это такое.3. тем не менее, предупреждение должно исходить из ER
4. полностью согласен. но OP получает предупреждение, а я нет. что заставляет меня задуматься, что находится в ER.
5. ОК. Итак, конструкция, которую я дал, является ошибкой в синтаксисе.