Ошибка C2280 происходит в функции шаблона класса в Visual Studio 2022C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ошибка C2280 происходит в функции шаблона класса в Visual Studio 2022

Сообщение Anonymous »

Ошибка C2280 происходит в функции шаблона класса в Visual Studio 2022
Компилятор сообщает, что функция удаляется, поскольку используется элемент данных типа.class CReference {
public:
double& m_Reference;
CReference(double& Data) :
m_Reference(Data)
{
}
virtual ~CReference() {};
CReference(const CReference& Obj) :
m_Reference(Obj.m_Reference) {
}
CReference& operator = (const CReference& Obj) {
m_Reference = Obj.m_Reference;
return *this;
}
};
int main() {
double e0 = 1.0, e1 = 2.0;
CReference R0(e0);
CReference R1(e1);
CReference R2(R0);
R2 = R1;
}
< /code>
Классы шаблонов и функции шаблонов также могут быть скомпилированы и выполняются нормально < /p>
template
class CVectorReference2 {
public:
Type& m_x, & m_y;
Type& m_s, & m_t;
CVectorReference2(Type& Value0, Type& Value1) :
m_x(Value0), m_y(Value1),
m_s(Value0), m_t(Value1) { }
virtual ~CVectorReference2() {}
CVectorReference2(const CVectorReference2& Vector) :
m_x(Vector.m_x), m_y(Vector.m_y),
m_s(Vector.m_s), m_t(Vector.m_t) { }
CVectorReference2& operator=(const CVectorReference2& Vector) {
Assign(Vector);
return *this;
}
template
inline void Assign(const CVectorReference2& Vector) {
m_x = (Type)Vector.m_x;
m_y = (Type)Vector.m_y;
}
};
int main() {
double e0, e1, e2 = 1.0, e3 = 2.0;
CVectorReference2 P0(e0, e1);
CVectorReference2 P1(e2, e3);
CVectorReference2 P2(P0);
P2 = P1;
}
< /code>
Но когда Operator = заменяется функцией шаблона, сообщается об ошибке C2280, говоря, что используются элементы данных типа ссылки? Почему?template
class CVectorReference2 {
public:
Type& m_x, & m_y;
Type& m_s, & m_t;
CVectorReference2(Type& Value0, Type& Value1) :
m_x(Value0), m_y(Value1),
m_s(Value0), m_t(Value1) { }
virtual ~CVectorReference2() {}
CVectorReference2(const CVectorReference2& Vector) :
m_x(Vector.m_x), m_y(Vector.m_y),
m_s(Vector.m_s), m_t(Vector.m_t) { }
template //

Подробнее здесь: https://stackoverflow.com/questions/794 ... tudio-2022
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»