"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que estou recebendo o erro do compilador C2280 "Tentativa de fazer referência a uma função excluída" no Visual Studio 2015?

Por que estou recebendo o erro do compilador C2280 "Tentativa de fazer referência a uma função excluída" no Visual Studio 2015?

Publicado em 2024-11-05
Navegar:467

Why Am I Getting Compiler Error C2280 \

Erro do compilador C2280 "Tentativa de fazer referência a uma função excluída" no Visual Studio 2015

O compilador do Visual Studio 2015, ao contrário de seu antecessor de 2013, gera automaticamente um construtor de cópia excluído para classes que definem um construtor de movimento ou um operador de atribuição de movimento. Esse comportamento é exigido pelo padrão C para evitar cópias acidentais em situações em que a movimentação é preferida.

No seu trecho de código, a classe A tem um construtor de movimentação A(A &&), que por sua vez implica uma cópia excluída construtor de acordo com o padrão. Consequentemente, a nova expressão A(a) em main aciona o erro C2280.

Para resolver esse problema, você pode declarar explicitamente o construtor de cópia em A:

class A {
public:
   A() {}
   A(A &&) {}
   A(const A&) = default; // Explicitly declare the copy constructor as defaulted
};

Como alternativa, se você realmente pretende desabilitar a cópia e permitir apenas a movimentação, você pode declarar o construtor de cópia e o operador de atribuição de cópia como excluídos:

class A {
public:
   A() {}
   A(A &&) {}
   A(const A&) = delete;
   A& operator=(const A&) = delete; // Delete copy assignment operator
};

Lembre-se, se você optar por desabilitar a cópia, você também precisará declarar um operador e um destruidor de atribuição de movimentação para cumprir a Regra dos Cinco.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3